2014-01-09 45 views
3

從一個線程我排隊事件在主線程這樣的環境中運行中:從TThread類隊列中刪除匿名方法

TThread.Queue(nil, procedure begin AddDataToChart(SomeData) end); 

在某些時候現在我需要離隊這些事件,因爲這是該組件在匿名方法中的地址被破壞,因此不應該接收更多的數據。我知道我可以通過調用TThread.RemoveQueuedEvents從TThread synclist出列事件。不幸的是,這似乎只適用於線程方法,但不適用於排隊的匿名方法。所以我的問題是如何從隊列中刪除我的匿名方法。

+0

你可以在調用'AddDataToChart'之前進行驗證檢查嗎?一個簡單的全局(範圍內)布爾值就足夠了。 –

+0

@L RD RD我真的想過這個,但發現這個解決方案有點骯髒。我認爲刪除排隊的事件會更清潔,因此不會首先運行AddDataToChart代碼。 – iamjoosy

+0

也許你可以用OTL等其他線程庫做得更好?或者你可以制定一個專門的'TThreadQueue '這些匿名方法,並從Application.OnMessage –

回答

1

TThread沒有公開任何方式來刪除排隊的匿名程序。唯一的選擇是使用專用的TThread對象(對該對象調用TThread.Queue()方法的非class版本,或將該對象作爲AThread參數傳遞給TThread.Queue()class版本),然後您可以將該對象反對使用TThread對象作爲輸入的TThread.RemoveQueuedEvents()方法。