【发布时间】:2015-11-15 16:06:51
【问题描述】:
我在WinForms 中搜索了很多异步更新 UI 控件的示例,并且大多数示例都有大量代码。有没有办法让这更容易?我只是觉得他们现在工作太多了。
我见过人们这样做:
await Task.Run(() =>
{
doSomething();
});
但我听说这很糟糕而且不能正常工作,而且我不喜欢在我的 UI 代码中添加多个 await Task.Run(()=> {}); 实例。而且我已经看到了大量关于后台工作人员的示例。
有没有不需要太多样板代码的更好方法?
【问题讨论】:
-
一个更好的方法来做什么?您发布的代码 sn-p 本身并没有什么问题,但是上下文太少,以至于实际上没有什么有用的东西可以说。
Task.Run()是今天恕我直言,处理长时间运行的操作的最佳方式,否则,await是将 UI 代码与此类长时间运行的操作同步的最佳方式。 -
但是您的问题中没有任何内容可以提供任何真正的问题陈述。事实是,正确地完成不会使用工作任务和更新 UI 的大量额外代码;如果你有很多额外的代码,你做错了。但是没有办法帮助你知道如何修复你做错的代码,除非你提供a good, minimal, complete code example,清楚地表明你在说什么。
-
我只想在不调用非法跨线程错误的情况下更新代码
-
您的问题中没有任何内容实际上要求这样做。如果这实际上就是您想知道的全部内容,那么 Stack Overflow 上已经有很多问题和答案可以解决这个问题。您所要做的就是搜索异常消息文本。
-
如果建议的答案确实回答了您打算提出的问题,那么您的问题就是重复的。已经有几个答案与此处发布的相同,包括这个(实际上优于此处发布的):stackoverflow.com/a/3874177