2013-03-25 51 views
0

我在一個有很多線程的應用程序中。在其中一個線程中,我需要在主線程上運行一些行。在主線程上做一些工作

這是因爲Windows XP釋放I/O資源,當創作者線頭(重疊I/O)。我需要在單例創建中進行實例化。

我該怎麼做?

閒談答案之前:

這不是GUI有關,所以不建議使用類似myControler.BeginInvoke,因爲我沒有GUI元素

+0

你必須讓你的主線程與其他線程交互。這可以通過像AutoResetEvent這樣的同步原語來完成。但是,這真的很難得到正確的答案。我認爲使用某種工作隊列將會是一個更好的設計。 – 2013-03-25 16:39:13

+0

錯誤..不要結束創建者線程?這會不會更容易? – 2013-03-25 17:47:45

+0

@MartinJames我沒有調用我的線程 – J4N 2013-03-26 07:06:37

回答

0

我終於做到了這一點:

  1. 我加入,我需要創建
  2. 所有IP地址一個BlockingCollection當我「啓動」我單身,我只需添加我的IP地址該集合
  3. 我在開始一個新的線程,將Background屬性設置爲True,在該集合上進行迭代

此線程不會消耗很多資源,因爲他將僅等待下一個並在申請期間保持活躍狀態​​。

我添加了一個條件來做到這一點在Windows XP和更低。

3

你不能只是運行在主線程一些代碼,因爲它可能正在忙着做別的事情。 您需要一些框架來完成此任務,而Windows UI消息傳遞就是此類框架的一個例子。

如果您的應用程序是非ui的,那麼您可以實現一個靜態消息隊列,將您的委託放在那裏,並不斷從主線程檢查該隊列,並將其委託給它並執行它們。

但是,更好的方法是重新評估應用程序體系結構。也許你可以將IO對象的工作分離到一個線程。

+0

Dispatch.Run():分派器在一個循環中處理事件隊列。該循環被稱爲框架。初始循環通常由應用程序通過調用Run啓動。 主執行框架將繼續執行,直到分派器關閉,您可以調用ExitAllFrames()來停止消息泵。 – David 2013-03-25 16:38:47

+0

我有5到6個不同的類庫,在開始課和單身課之間有20+類。我只是不能做些什麼,並祈禱使用使用庫的庫的人使用我的庫進行實例化。 – J4N 2013-03-25 16:39:21

+0

@David:我無法訪問任何GUI元素,我應該如何訪問任何調度程序? – J4N 2013-03-25 16:40:25

相關問題