在我的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