1

私はこの本当に小さな問題を抱えていますが、簡単には解決できません。現在、私のプログラムには「開始」と「キャンセル」の 2 つのボタンがあります。ユーザーがスタートをクリックすると、ボタンはすぐに移動する必要があります。

StartButton.IsEnabled = false;

CancelButton.IsEnabled = true;

ただし、UI は常に最後に更新されるため、これは BackgroundWorker (ボタンを押した後に実行されるすべてのコード) が終了した場合にのみ発生します。バックグラウンドワーカーの「ProgressChanged」または「Completed」イベントにこれらのコマンドを追加する方法はありません。これらのイベントは、完了するまでに最大 10 分かかる場合があります。

簡単な方法の 1 つは、これらのコマンドを「ProgressChanged」部分に追加し、最後に「Complete」で状態を再度変更することです。しかし、いくつかの「ProgressChanged」イベントの後ではなく、ボタンが常に実際の状態を表示する必要があるため、これを避けたいと思います。もちろん、ボタンの UI プロパティを使用しないなど、回避策は常にあります。

これに対する短い解決策はありますか?

Button.Property の変更を ClickEvent に追加しても機能しません。これがこの問題の主な問題です。BGW の「完了」部分を使用して、ボタンの背面を開始状態に合わせて簡単に変更できます。問題は、すべてのイベントと BGW の直前にそれらを設定することです。

4

3 に答える 3

0

以下に示すように、そのボタン自体のクリック イベントでスタート ボタンを無効にし、BGW の RunWorkerCompleted イベントで再度有効にすることができます。

BackgroundWorker _worker = new BackgroundWorker();
_worker.DoWork += new DoWorkEventHandler(_worker_DoWork);

private void StartButton_Click(object sender, RoutedEventArgs e)
{
   startButton.IsEnabled = false;
}

 void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
    stratButton.IsEnabled = true;
 }

void _worker_DoWork(object sender, DoWorkEventArgs e)
{
  //Your processing code
}
于 2013-08-05T08:48:12.393 に答える
0

私の以前の質問を見てください(かなり似ています)。オプション 1 を選択する必要があります。

コード実行中の ASP.NET アプリケーション ログ/進行状況バー

UI は 5 秒だけ遅れます。テキストの代わりに、AJAX を使用してボタンのスタイルを更新します。

于 2013-08-05T08:31:48.507 に答える
0

次のようなスタートボタンがある場合:

this.StartButton = new System.Windows.Forms.Button();

それからあなたはすることができます

this.StartButton.Click += new System.EventHandler(this.button1_Click);

そして、する

  private void button1_Click(object sender, EventArgs e)
  {
     StartButton.IsEnabled = false;

     CancelButton.IsEnabled = true;
     Thread bg = new Thread(new ThreadStart( UpdateDatabase()));
     bg.Start();
  }

bgスレッドから UI にメッセージを送信する場合は、こちらInvokeようなメソッドを使用します

  public delegate void UpdateUIHndler();
  public void UpdateUI()
  {

  }

そして、やります

     if (InvokeRequired)
     {
        Invoke(new UpdateUIHndler(UpdateUI));
     }
于 2013-08-05T08:28:24.160 に答える