2009-10-21 45 views
0

在Delphi 2006中,我有一個相當複雜的應用程序,它使用另一個線程中的單獨窗體通過ApdComport進行通信。這個通信經常失敗,我發現了幾個調用Application.Processmessages的循環,並用ApdComport.ProcessCommunications來重新構建它。ApdComport在調用ProcessCommunications時報告ECommNotOpen

我不想重新安排代碼來使用事件處理程序,而不是現在。

我也想快速通訊,所以我打電話給ProcessCommunications,直到有CharReady。有時ProcessCommunications會通過消息「ie_NOpen - 設備未打開」引發ECommNotOpen異常。我一直無法在幫助或網絡上找到關於此的信息。

我試着將一個ApdComport放在新項目的一個新窗體中,並經常調用它的ProcessCommunications並且無法讓它崩潰。儘管它沒有做任何真正的交流。

我已經嘗試檢查輸出緩衝區有足夠的可用空間之前發送的東西,但它始終存在,問題仍然存在。

那麼發生了什麼?我應該在哪裏看,我該怎麼辦?

回答

1

您使用的是4.06版之前的版本嗎?

搜索「ie_NOpen」在此頁:http://www.turbocontrol.com/APRO406Fixes.htm

這是所提取的信息:

修復3941國家機關

狀態機將訪問端口訪問之後端口 停用以寫入 調度程序日誌。在某些 條件下,這會導致 ie_NOpen異常。要修復,使 以下更改由標記AdStMach.pas {!! 06}

procedure TApdStateComPortSource.StateDeactivate (State : TApdCustomState); 
begin 
    if FComPort.Open then             {!!.06} 
    FComPort.AddStringToLog (Name + ': Deactivate'); 
end;