0

重複の可能性:
フォームの Closing イベントで BackgroundWorker を停止する方法は?

Windows フォームに次のようなコードがあります。

button1_Click(object sender, EventArgs e)
{
  Widget myWidget = new Widget(...bunch of constructor parameters...);
  myWidget.Property1 = "blah"; // other properties get set here too...
  myWidget.InterestingThingHappened += InterestingThingHappened;

  Parallel.Invoke(myWidget.RunInterestingLongRunningProcess());
}

private void InterestingThingHappened(object sender, EventArgs e)
{
  myLabel.Invoke(new Action(() => myLabel.Text = "An interesting thing happened!"))
}

実行すると、タスク マネージャーで強制終了するまでアプリケーションがフリーズします。次に、「ウィンドウ ハンドルが作成されるまで、Invoke または BeginInvoke をコントロールで呼び出すことはできません」という例外が表示されます。button1_Clickは明らかにコントロール イベント ハンドラーであるため、このコードが実行される前にフォームが完全に作成されます。これが何を意味するのか、まったくわかりません。誰でも助けることができますか?

4

1 に答える 1

0

問題を完全に修正するのBeginInvoke()ではなく、使用します。Invoke()UI はリアルタイムで更新されます。なんで?知るか?

于 2012-09-24T22:21:31.073 に答える