2010-11-30 48 views

回答

3

對於不在主線程以外的任何線程中修改VCL對象的相同規則在這裏也是有效的。您不應該更改OnExecute事件處理程序中的任何VCL控件,因爲該代碼將在Indy爲每個連接產生的工作線程的上下文中運行。

如果您需要更改圖形用戶界面,請使用Synchronize或Queue方法,或者使用自定義通知機制通知主線程爲您進行GUI修改。

如果你想打電話同步或隊列方法,你必須鍵入鑄TIdYarn到TIdYarnOfThread從TIdYarn派生,並與線程實現它:

// Calling MyMethod using Synchornize inside TIdTcpServer.OnExecute event-handler 
TIdYarnOfThread(AContext.Yarn).Thread.Synchronize(MyMethod); 


// Calling MyMethod using Queue inside TIdTcpServer.OnExecute event-handler 
TIdYarnOfThread(AContext.Yarn).Thread.Queue(MyMethod); 
+3

的TThread具有靜態同步()和Queue()方法在D7 +中,所以你不需要直接訪問Yarn的內部。或者,也可以使用Indy的TIdSync和TIdNotify類,它們爲您處理這些細節。 – 2010-11-30 22:04:18