我發現你需要在WCF服務的STA線程上抽取消息,或者你錯過了來自COM對象的回調。
以下代碼有效,但它需要您通過Dispatcher調用COM對象。
ComWrapper comWrapper;
Thread localThread;
Dispatcher localThreadDispatcher;
public Constructor()
{
localThread = new Thread(ThreadProc)
{
Name = "test"
};
localThread.SetApartmentState(ApartmentState.STA);
AutoResetEvent init = new AutoResetEvent(false);
localThread.Start(init);
init.WaitOne();
}
private void ThreadProc(object o)
{
localThreadDispatcher = Dispatcher.CurrentDispatcher;
((AutoResetEvent)o).Set();
comWrapper = new ComWrapper()
Dispatcher.Run();
localThreadFinished.Set();
}
然後按如下方式撥打電話。
public void UsefulComOperation()
{
localThreadDispatcher.Invoke(new Action(() => comWrapper.UsefulOperation);
}
'localThreadFinished'沒有定義任何地方,只要我可以告訴...是你的意圖在'ThreadProc'頂部宣佈它,因爲'的AutoResetEvent localThreadFinished =(的AutoResetEvent)O'? – transistor1 2015-01-09 22:34:03