2013-04-14 62 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