這是this question的擴展/下一步我幾分鐘前問。異常調用線程的遠程SOAP調用
我有一個主窗體和一個線程的Delphi應用程序。每隔X秒,線程就會爲遠程對象發出Web服務請求。然後它回到主窗體處理用新信息更新UI。
我以前在我的線程中使用TTimer對象,並且TTimer回調函數運行時,它運行在主線程的上下文中(但遠程Web服務請求確實工作)。這相當於擊敗了單獨線程的目的,所以我現在在我的線程的Execute函數中有一個簡單的循環和睡眠例程。問題是,從GetIMySOAPService()返回時引發異常。
procedure TPollingThread.Execute;
var
SystemStatus : TCWRSystemStatus;
begin
while not Terminated do
begin
sleep(5000);
try
SystemStatus := GetIMySOAPService().GetSystemStatus;
PostMessage(ParentHandle, Integer(apiSystemStatus), Integer(SystemStatus), 0);
SystemStatus.DataContext := nil;
LParam(SystemStatus) := 0;
except
end;
end;
end;
任何人都可以建議爲什麼從線程調用此函數時引發此異常?我確信我忽略了一些基本和簡單的東西。
感謝,鄧肯
你也應該發佈異常類和消息。 – mghie 2010-03-29 16:59:52
異常類是EOleException,並且消息是「CoInitialize尚未被調用」......這已經解決了我的問題,因爲我認爲這需要XML引擎。 – Duncan 2010-03-29 17:39:03
我假設那麼多。做任何與OLE相關的事情都需要調用「CoInitialize()」。主VCL線程在OLE單元的初始化過程中自己完成,對於程序員必須執行的所有其他線程。 – mghie 2010-03-29 17:46:42