Rob*_*ell 1 .net button winforms
我在表单上有一个提交Web请求的Windows窗体按钮.我希望能够在第一次单击时禁用该按钮,然后在收到响应时重新启用它.我没有太多控制被调用的代码以及如何调用它所以我可以使用的是Button事件,或者我可以创建自己的按钮,继承自Button,如下所示:
public class SingleClickButton : Button
{
protected override void OnClick(EventArgs e)
{
bool wasEnabled = this.Enabled;
this.Enabled = false;
if (wasEnabled)
{
base.OnClick(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我必须最后调用基本OnClick方法,因为在Web请求完成之前按钮不会禁用.
我遇到的问题是,如果用户多次单击,则单击事件似乎会累积并且仍然执行.有没有办法取消所有排队的活动?或者是否有一个更简单的解决方案来解决我的问题?
您需要使用此方案:
public class SingleClickButton : Button
{
protected override void OnClick(EventArgs e)
{
this.Enabled = false;
RunAsynchronousMethod( CallBack );
base.OnClick(e);
}
void CallBack()
{
this.Enabled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
"RunAsynchronousMethod"可以创建新的"Thread"或使用"ThreadPool.QueueUserWorkItem".
编辑:
public class SingleClickButton : Button {
protected override void OnClick(EventArgs e) {
this.Enabled = false;
RunAsynchronousMethod( CallBack );
base.OnClick(e);
}
void CallBack() {
this.Enabled = true;
}
void RunAsynchronousMethod( Action callBack ) {
// there you can use ThreadPool or Thread
ThreadPool.QueueUserWorkItem( this.Worker, callBack );
}
void Worker( object callBack ) {
try {
// some operations
}
finally {
// after operations was proceeded, the callback function will
// be called
((Action)callBack)();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5325 次 |
| 最近记录: |