フォームにチェックボックスが2つあります。無効になっているチェックボックスが無効になっています
ボタンを押すと、バックエンドで何らかの操作が行われています(約3秒間)。
これまでは、ユーザーの操作を防ぐためにチェックボックスを無効にしています。私は無効にするチェックボックスをクリックした場合、それは私がこれを防ぐにはどうすればよい
を有効になります後はしかし、それは反応しますか?
フォームにチェックボックスが2つあります。無効になっているチェックボックスが無効になっています
ボタンを押すと、バックエンドで何らかの操作が行われています(約3秒間)。
これまでは、ユーザーの操作を防ぐためにチェックボックスを無効にしています。私は無効にするチェックボックスをクリックした場合、それは私がこれを防ぐにはどうすればよい
を有効になります後はしかし、それは反応しますか?
私は、リソース集約型のプロセスを実行している間、UIが固定されていると考えています。マウスクリックはキューに入れられ、処理が完了するまで処理されません。この時点で、チェックボックスは既に有効になっています。
太い3秒の操作を処理するにはBackgroundWorkerスレッドを使用することをお勧めします。これはあなたのUIを自由にマウスクリックのようなものを処理するために維持し、あなたの問題を解決する必要があります。
これはまさに起こっていることです!返信をありがとう、私はBackgroundWorkerがこのような短い期間のために必要ではないと思った、私は試してみましょう – Gaddigesh
あなたは、あなたのバックエンドの操作を行っているどのようにUIが
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.WorkerReportsProgress = true;
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++)
{
if ((worker.CancellationPending == true))
{
e.Cancel = true;
break;
}
else
{
// Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500);
worker.ReportProgress((i * 10));
}
}
}
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%");
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
this.tbProgress.Text = "Canceled!";
}
else if (!(e.Error == null))
{
this.tbProgress.Text = ("Error: " + e.Error.Message);
}
else
{
this.tbProgress.Text = "Done!";
}
}
を凍結防止のためにBackgroundWorkerのを使用することができますか? BackgroundWorkerスレッドを使用していますか? –
いいえ、それは単一のスレッド上にあります – Gaddigesh
可能な複製[ボタン無効化と有効化](http://stackoverflow.com/questions/8975569/button-disable-and-enable) –