2017-11-07 4 views
0

ボタンクリックイベントでプロセスが実行されている間にtextboxを無効にしたい。 textboxがイベント後に無効になったことに気付きましたが、groupboxradiobuttonsはすぐに無効になります。 ボタンは最初に無効にする必要があります。また、メソッドの戻り値に応じて、ボタンを有効にするか、無効にしておく必要があります。私の現在のコードザッツボタンクリックイベントでプロセス実行中にテキストボックスを無効にする

private async void BtnConfirmClick(object sender, EventArgs e) 
{ 
    try 
    { 
     textbox.Enabled = false; 
     groupbox.Enabled = false; 
     await somemethod() 
     ... 
    } 
} 

ボタンイベントにテキストしばらく変更するとき、私は同じ問題を抱えてきました。

+0

これは、UIスレッドで 'somemethod'が同期しているかどうかによって異なります。 –

+0

いくつかの '非同期'メソッド、いくつかの変更configfiles、いくつかのインポート証明書、...私はグループボックスのようにボタンのクリックイベントの開始時にテキストボックスを無効にします。 –

+1

これは無効にする必要があります.UIスレッドをブロックすると、視覚的な外観に反映されません。 'textbox.Enabled = false;'の後に 'textbox.Update();'を追加することでそれを見ることができます。 –

答えて

0
private async void BtnConfirm_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     // you dont want user to click twice 
     BtnConfirm.Enabled = false; 

     // ConfigureAwait(false) configures the task so it doesn't need to block caller thread 
     await Somemethod().ConfigureAwait(false); 
    } 

    finally 
    { 
     // BeginInvoke prevents thread access exceptions 
     BeginInvoke((Action)delegate 
     { 
      BtnConfirm.Enabled = true; 
     }); 
    } 
} 

private async Task Somemethod() 
{ 
    await Task.Delay(TimeSpan.FromSeconds(5)); 
} 

あります。 ConfigureAwait(false)の後にBeginInvokeでUI操作を行ってください。なぜなら、タスクはおそらく別のスレッドで終了するからです。 お手伝いをしてください。

関連する問題