0

可能重复:
如何在窗体的关闭事件中停止 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 回答