对于在其他线程中创建的对象,有没有办法使用Invoke
和InvokeRequired
方法?有没有一种更直接,内存更少的方法?也许状态机或线程控制?
我是否在浪费时间担心此方法的资源使用情况?
我正在使用此调用方法:http://tech.xster.net/tips/invoke-ui-changes-across-threads-on-vb-net/
我在VS 2012中使用VB.NET
答案 0 :(得分:1)
这非常符合我医生的通常建议:“如果疼,那就不要这样做了。”
有几种.NET模式强调将线程代码与需要在UI上运行的代码分开。 BackgroundWorker已经存在很长时间了,请注意其ProgressChanged和RunWorkerCompleted事件如何在UI线程上运行。无需自行调用即可更新UI的好地方。
.NET 4 Task类向您提供TaskScheduler.FromCurrentSynchronizationContext()方法。这是链接在UI线程上运行的任务的好方法,非常专门用于使用异步运行的先前任务的结果更新UI。 VS2012提供了另一种使用Async和Await关键字的武器。避免编写您不想写的代码的所有好方法。