我在一個有很多線程的應用程序中。在其中一個線程中,我需要在主線程上運行一些行。在主線程上做一些工作
這是因爲Windows XP釋放I/O資源,當創作者線頭(重疊I/O)。我需要在單例創建中進行實例化。
我該怎麼做?
閒談答案之前:
這不是GUI有關,所以不建議使用類似myControler.BeginInvoke
,因爲我沒有GUI元素
我在一個有很多線程的應用程序中。在其中一個線程中,我需要在主線程上運行一些行。在主線程上做一些工作
這是因爲Windows XP釋放I/O資源,當創作者線頭(重疊I/O)。我需要在單例創建中進行實例化。
我該怎麼做?
閒談答案之前:
這不是GUI有關,所以不建議使用類似myControler.BeginInvoke
,因爲我沒有GUI元素
我終於做到了這一點:
BlockingCollection
當我「啓動」我單身,我只需添加我的IP地址該集合此線程不會消耗很多資源,因爲他將僅等待下一個並在申請期間保持活躍狀態。
我添加了一個條件來做到這一點在Windows XP和更低。
你不能只是運行在主線程一些代碼,因爲它可能正在忙着做別的事情。 您需要一些框架來完成此任務,而Windows UI消息傳遞就是此類框架的一個例子。
如果您的應用程序是非ui的,那麼您可以實現一個靜態消息隊列,將您的委託放在那裏,並不斷從主線程檢查該隊列,並將其委託給它並執行它們。
但是,更好的方法是重新評估應用程序體系結構。也許你可以將IO對象的工作分離到一個線程。
你必須讓你的主線程與其他線程交互。這可以通過像AutoResetEvent這樣的同步原語來完成。但是,這真的很難得到正確的答案。我認爲使用某種工作隊列將會是一個更好的設計。 – 2013-03-25 16:39:13
錯誤..不要結束創建者線程?這會不會更容易? – 2013-03-25 17:47:45
@MartinJames我沒有調用我的線程 – J4N 2013-03-26 07:06:37