2013-04-14 35 views
0

有没有办法在其他线程中创建的对象使用InvokeInvokeRequired方法?有没有一种方法更直接,减少内存密集?也许状态机或线程控制?替换INVOKE的方法

我浪费时间担心这种方法的资源使用情况吗?

我使用这个invoke方法:http://tech.xster.net/tips/invoke-ui-changes-across-threads-on-vb-net/

我在VS使用VB.NET 2012

+0

不确定你在问什么。 Invoke和InvokeRequired用于访问UI线程。 – dbasnett

+0

dbasnett,谢谢。我确实有使用Invoke方法访问UI线程的代码。但是,有不止一种方式来剥皮猫,我正在寻找另一种选择。 Hans Passant给了我足够的信息来做一些挖掘工作。 – turbonate

回答

1

这有力地适合我的医生通常建议:“如果它伤害那就不要做” 。

有几种.NET模式强调保持线程代码与需要在UI上运行的代码分离。 BackgroundWorker已经可用很长时间了,请注意它的ProgressChanged和RunWorkerCompleted事件如何在UI线程上运行。无需自己调用即可更新UI的好地方。

.NET 4 Task类为您提供了TaskScheduler.FromCurrentSynchronizationContext()方法。链接在UI线程上运行的任务是一种很好的方法,它专门用于将UI更新为异步运行的先前任务的结果。 VS2012提供了Async和Await关键字的另一个武器。避免编写不想写的代码的所有好方法。

+0

这就是我所希望的。谢谢。我有足够的信息去做一些很棒的挖掘工作。 :d – turbonate