可能重複:
How to block Winforms UI while background thread is running如何鎖定應用程序GUI在C#WinForm的
我使用的是C#WinForm應用程序
我有屏幕,上保存按鈕屏幕的數據被保存到數據庫。
當用戶點擊按鈕應用程序進入數據庫並保存數據時會發生什麼情況。 需要一些時間。
但意思而如果用戶的保存按鈕再次Click事件得到獲取,並在第一次點擊返回到主代碼捕獲事件被解僱(保存數據庫後)..
總之click事件當線程從第一個事件返回 (我嘗試啓用/禁用按鈕的場景)時被捕獲並觸發。
我該如何阻止這種行爲。
問候, AKHIL
@Jalal:我嘗試此代碼與一些修改爲
private readonly object _userActivityLocker = new object();
private void btnSave_Click(object sender, EventArgs e)
{
if (System.Threading.Monitor.TryEnter(_userActivityLocker))
{
//note that any sub clicks will be ignored while we are here
try
{
DateTime dt = DateTime.Now;
Thread.Sleep(2000);
Debug.Print("FirstClick {0} Second Click {1}",dt.ToLongTimeString(), DateTime.Now.ToLongTimeString());
//here it is safe to call the save and you can disable the btn
Application.DoEvents();
}
finally
{
System.Threading.Monitor.Exit(_userActivityLocker);
//re-enable the btn if you disable it.
}
}
}
但是當我快速點擊按鈕(i相5次快速點擊選中)5點擊事件 已被觸發,控制檯窗口正在顯示
FirstClick 1:30:22 PM Second Click 1:30:24 PM FirstClick 1:30 :24 PM Second Click 1:30:26 PM FirstClick 1:30:26 PM Second Click 1:30:28 PM FirstClick 1:30:28 PM Second Click 1:30:30 PM FirstClick 1:30:30 PM Second Click 1:30:32 PM
轉到此鏈接http://stackoverflow.com/questions/648255/how-to-block-winforms-ui-while-background-thread-is-running – Vamsi
奇怪......那麼應該工作 – V4Vendetta
@ V4Vendetta:這是**預期的**發生..看到我的答案更多信息。 –