在我的BackgroundWorker
中,我需要使用非線程保存API定期構造和處理各種數據。我知道可以在主線程上調用一個Actions隊列,但我不知道如何從這個隊列返回一個值。c#定期從主線程返回值
那麼這怎麼可能呢?或者有沒有比BackgroundWorker
更好的方法?
到目前爲止我只能找到this.Invoke
,但是我不能使用它們,因爲API(Unity 5 Engine)不提供類似的功能。
我的環境只支持.NET 2.0。
編輯:我可能需要給予一定的exampels
假設Foo
的constructur只能從mainthread叫,我需要做的這
TheInvokeMethode(() => { FooArray[i] = new Foo();});
SomeMethode(FooArray[i]);
或assumming的Bar
AddComponent()
能只能從MainThread調用
Bar SomeBar;
TheInvokeMethode(() => { SomeBar.AddComponent()});
然而TheInvokeMethode
只是表示包含的代碼應該在MainThread上執行。
如果您使用的是Unity3D,則應將其添加到標籤中。我記得BackgroundWorker是Windows.Forms的一部分,它在Unity3D中不可用。 – Vlad
@Vlad nope,BackgroundWorker在'ComponentModel'上,不知道Unity是否有它,但它沒有鏈接到'Windows.Forms',而是有一個方便的控件放入它。它應該在有'SynchronizationContext'(與Task.Run相同)的地方工作 – Jcl
@Jcl Unity主線程沒有SynchronizationContext。你可以自己寫。 – Vlad