可能性の重複:
How to block Winforms UI while background thread is runningC#WinフォームアプリケーションのGUIをロックする方法
私は画面どこに保存]ボタンを持っているのC#のWinFormアプリケーション
を使用しています画面のデータはデータベースに保存されます。
ユーザーがボタンをクリックすると、アプリケーションはデータベースに行き、データを保存します。 時間がかかります。短いクリックイベントで
が、ユーザが再びClickイベントがキャッチイベントがクビcatchedと(データベースを保存した後)、メインコードの最初のクリックしてリターンを取得[保存]ボタンをクリックするとしながら、意味..
スレッドが最初のイベント (私はボタンの有効/無効のシナリオを試してみました)から戻るときに捕捉され、解雇されます。
この動作を停止するにはどうすればよいですか。
よろしく、 アクヒル
@Jalal:5クリック(私は5回急速クリックで確認)私は
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.
}
}
}
として、いくつかの変更でこのコードを試してみましたが、私は急速ボタンをクリックしたときイベント が実行され、コンソールウィンドウが表示されます
FirstClick 1:30:22 PM第2クリック1:30:24 PM FirstClick 1:30 :24 PM第2クリック1:30:26 PM FirstClick 1:30:26 PM第2クリック1:30:28 PM FirstClick 1:30:28 PM第2クリック1:30:30 PM FirstClick 1:30:30 PM第2クリック1:30:32 PM
このリンクに行くhttp://stackoverflow.com/questions/648255/how-to-block-winforms-ui-while-background-thread-is-running – Vamsi
奇妙なこと...うまくいきました – V4Vendetta
@ V4Vendetta:これは**起こることが期待されている..詳細については私の答えを参照してください。 –