我在C#中的多線程應用程序的工作/。NET
我想每個線程創建其自己的形式,因此它可以訪問它並顯示其其表格中的信息沒有任何問題
有沒有辦法做到那?
我試過Application.Run(新的MyForm()),但問題是這個函數阻止執行,我的線程無法完成它的工作。多個GUI一個foreach線程在.net中?
回答
您可以使用您的窗體的Show
方法表現出來,即使你想顯示在Dialog
形式你可以使用ShowDialog
方法的形式,對話將在其他形式的頂部。
大概每個線程都會有一些信息,它會在它自己的窗口中實時顯示。所以模態形式不會起作用;他們會阻止。 – 2012-07-29 22:39:43
@RobertHarvey - 你確定嗎?攜帶發佈到其他表單的數據的消息會發生什麼情況?好的,他們沒有專注,但是他們應該仍然能夠處理不需要專注的張貼消息? – 2012-07-29 23:24:58
您需要使用Show方法從其線程中打開窗體,並且不能在不同線程的窗體之間鏈接,如來自不同線程的MDI父窗口和子窗體。 順便說一下,你可以在主要的GUI線程中打開所有的窗體,並且使用invoke從其他線程顯示數據而沒有任何問題,我認爲這種方法更好。看這裏:http://msdn.microsoft.com/en-us/library/ms951089.aspx
這是設計。線程一次只能做一件事,所以如果你的代碼運行在該線程上的UI將被阻塞,並且如果你想運行一個UI,你將不得不使用一些消息傳遞構造(例如計時器)來獲取你的工作完成了。
正確的方法確實是擁有一個UI線程,並讓其他線程異步發佈進度消息以便在UI上顯示(例如,在窗體上使用BeginInvoke
,這可以安全地從其他線程調用)。
您也可以使用一個'BackgroundWorker',它具有一種安全的方式將狀態信息封送回表單。 – 2012-07-29 22:42:03
對。我在.NET 1.1中完成了這種工作,但當時沒有BackgroundWorker,我總是忘記它。在此期間,我主要進行服務器開發,這使我免於使用線程綁定的窗口消息。 – Lucero 2012-07-29 22:43:39
- 1. 線程一個GUI
- 2. 在.Net中克隆一個線程
- 3. 在.net中排隊一個線程
- 4. 同步.NET中的多個線程4
- 5. 從一個foreach .NET 2.0
- 6. 創建一個GUI更新線程
- 7. PyQt - 從另一個線程修改GUI
- 8. foreach在一個foreach中php
- 9. 從另一個線程foreach listview項目
- 10. 多維數組 - foreach在一個foreach內
- 11. 如何在一個程序中創建多個GUI表單?
- 12. 線程在GUI中
- 13. 多少個線程在一個循環
- 14. 使用forEach()在多個線程或forEach()和lambdas中進行集合迭代
- 15. 簡單的GUI應用程序中有多少個線程?
- 16. 多線程訪問.net中的一個集合
- 17. log4j在多線程環境中。每個線程一個Appender或每個線程一個Logger或...?
- 18. 從一個線程啓動一個函數。 (GUI線程和QThread錯誤)
- 19. .net多線程
- 20. .net多線程?
- 21. 在GUI中顯示另一個線程的狀態
- 22. 如何在另一個線程中訪問GUI元素?
- 23. gtk/c在一個線程中操縱GUI:奇怪的錯誤
- 24. 從另一個線程更新GUI線程
- 25. 在單個線程上處理來自多個線程的請求 - .NET Core
- 26. 線程多次加入()一個線程
- 27. 支持從另一個線程創建GUI的GUI庫
- 28. 在C#中如何根據另一個線程中的類來顯示來自另一個GUI的GUI?
- 29. 多個foreach vs多個if內部foreach
- 30. 一個畫布,多線程
做form.Show()代替。他們不在單獨的線程中,但他們也不阻止。在不同的線程中產生太多的表單似乎並不是一個好主意。 – nawfal 2012-07-29 22:31:46
爲什麼它不是一個好主意?我認爲這比從所有主題更新一個gui更好 – 2012-07-29 22:35:29