2017-05-06 62 views
0

我的WinForms應用程序在啓動時不會立即執行Application.Run(Form)是否所有的WinForms應用程序窗口都共享同一個線程?

它首先初始化一些變量,訪問命令行參數,應用程序配置API,其他外部的東西,特別是實例化的形式(例如登錄形式)(並通過傳遞一些先前設置的值)與using並顯示ShowDialog

然後執行Application.Run(Form)顯示主窗體,但主窗體也可以顯示其他窗體(主要是ShowDialog)。所有表單都在單獨的類庫中定義。他們中的很多人(窗口)需要訪問在Program.Main(string[] args)中實例化的對象(是的,我已經添加了string[] args部分,儘管使用Visual Studio創建的WinForms應用程序缺省沒有它)並將對象傳遞給對方;

這讓我擔心線程安全,但是我對「UI線程」概念的基本概念暗示了我的擔心可能是錯誤的。

那麼,所有的實例化和相同的WinForms應用程序共享顯示相同的UI線程(除非我把代碼實例/顯示在他們的窗戶(Form實例)異步運行Task或類似的東西明確課程)?或者我應該實際使用一些特殊的技術(具體的建議值得讚賞)在它們之間安全地傳遞數據?

回答

3

回答你的問題有點難,因爲總會有「......但我在這裏和那裏創建一些線程......」潛伏着你沒有告訴我們。

但是,除了這個,那麼是的。 Winforms應用程序將爲其用戶界面和所有周圍的代碼使用1個線程。

請注意,如果你開始擺弄如下:

  • Task.Run
  • Thread類
  • BackgroundWorker的

那麼我的回答就走出了窗外。

相關問題