我是Windows Forms的新手。我创建的Windows窗体应用程序是执行非常耗时的数据转换任务的组件的前端。数据转换任务会发出表单订阅的事件。
当表单收到某个事件时,它会更改标签中的文字并为该标签调用Refresh()
。
当我从表单运行该过程时,它仍然保持响应并更新标签文本大约一分钟左右。之后,它只是冻结,Windows声明进程“无响应”,直到数据转换完成,此时表单解冻,标签显示数据转换完成(如预期的那样)。
我没有把数据转换放到一个单独的线程上 - 这是我应该尝试的第一件事吗?事件可以跨线程吗?如果没有,我还应该做什么?
答案 0 :(得分:2)
是的,线程是您应该工作的地方。 WinForms中的多线程,取决于您的版本,可能会很棘手。
如果您使用的是.NET 4.0或更高版本,则可以使用Microsoft Task Parallel Library。
否则,有一篇很好的文章here来自C#Corner,它涵盖了WinForms应用程序中的线程,我建议将其作为起点。
BackgroundWorker是在WinForms中简化线程的另一种选择。