Я видел некоторое обсуждение этой темы и пришел к выводу, что это невозможно.Я должен использовать Threads, сделать его STA и, когда мне понадобится результат, присоединиться к основному потоку с созданным потоком.Это может работать, но это не идеальное решение, так как используя делегатов, я могу достичь чистого асинхронного поведения (используя обратный вызов).Итак, в квадрат - непосредственно перед тем, как я начну реализовывать свой собственный класс Future (как в Java);Есть ли лучший способ добиться этого с помощью делегатов?
private delegate String DelegateFoo(String[] input);
private String Foo(String[] input){
// do something with input
// this code need to be STA
// below code throws exception .. that operation is invalid
// Thread.CurrentThread.SetApartmentState(ApartmentState.STA)
return "result";
}
private void callBackFoo(IAsyncResult iar){
AsyncResult result = (AsyncResult)iar;
DelegateFoo del = (DelegateFoo)result.AsyncDelegate;
String result = null;
try{
result = del.EndInvoke(iar);
}catch(Exception e){
return;
}
DelegateAfterFooCallBack callbackDel = new DelegateAfterFooCallBack (AfterFooCallBack);
// call code which should execute in the main UI thread.
if (someUIControl.InvokeRequired)
{ // execute on the main thread.
callbackDel.Invoke();
}
else
{
AfterFooCallBack();
}
}
private void AfterFooCallBack(){
// should execute in main UI thread to update state, controls and stuff
}