0

我对 Windows 窗体有点陌生。我创建的 Windows 窗体应用程序是执行非常耗时的数据转换任务的组件的前端。数据转换任务发出表单订阅的事件。

当表单接收到事件时,它会更改标签中的文本并调用Refresh()该标签。

当我从表单运行该过程时,它会保持响应并更新标签文本可能一分钟左右。之后,它只是冻结并且 Windows 声明进程“无响应”,直到数据转换完成,此时表单解冻并且标签显示数据转换已完成(如预期的那样)。

我还没有将数据转换放到单独的线程上——这是我应该尝试的第一件事吗?事件可以跨线程吗?如果没有,我还应该怎么做?

4

1 回答 1

3

是的,线程是你应该工作的地方。根据您的版本,WinForms 中的多线程可能会很棘手。

如果您使用的是 .NET 4.0 或更高版本,则可以使用Microsoft Task Parallel Library

否则,这里有一篇来自 C# Corner 的好文章,涵盖了我建议作为起点的 WinForms 应用程序中的线程。

BackgroundWorker是在 WinForms 中简化线程的另一个选项。

于 2012-09-24T15:54:38.113 回答