gpt4 book ai didi

.net - 如何停止单击两次 Windows 窗体按钮

转载 作者:行者123 更新时间:2023-12-05 09:00:34 24 4
gpt4 key购买 nike

我在提交 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);
}
}
}

我必须最后调用基本的 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;
}
}

“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)();
}
}
}

关于.net - 如何停止单击两次 Windows 窗体按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/970535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com