2012-03-21 24 views
0

フォームにチェックボックスが2つあります。無効になっているチェックボックスが無効になっています

ボタンを押すと、バックエンドで何らかの操作が行われています(約3秒間)。

これまでは、ユーザーの操作を防ぐためにチェックボックスを無効にしています。私は無効にするチェックボックスをクリックした場合、それは私がこれを防ぐにはどうすればよい

を有効になります後

はしかし、それは反応しますか?

+0

を凍結防止のためにBackgroundWorkerのを使用することができますか? BackgroundWorkerスレッドを使用していますか? –

+0

いいえ、それは単一のスレッド上にあります – Gaddigesh

+1

可能な複製[ボタン無効化と有効化](http://stackoverflow.com/questions/8975569/button-disable-and-enable) –

答えて

2

私は、リソース集約型のプロセスを実行している間、UIが固定されていると考えています。マウスクリックはキューに入れられ、処理が完了するまで処理されません。この時点で、チェックボックスは既に有効になっています。

太い3秒の操作を処理するにはBackgroundWorkerスレッドを使用することをお勧めします。これはあなたのUIを自由にマウスクリックのようなものを処理するために維持し、あなたの問題を解決する必要があります。

+0

これはまさに起こっていることです!返信をありがとう、私はBackgroundWorkerがこのような短い期間のために必要ではないと思った、私は試してみましょう – Gaddigesh

0

あなたは、あなたのバックエンドの操作を行っているどのように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!"; 
    } 
} 
関連する問題