爲了論證的緣故,可以將UI線程視爲一個已調用Application.Run()
或調用它的重載之一的線程,並且具有正在運行的活動消息循環。如何檢測我們是否在UI線程上?
有沒有一種方法來檢測我們目前是否正在執行這樣的線程?
我想要這個的原因是因爲我有一個具有長時間運行的私有函數的類。這個類本身已經是多線程的,並且這個類的用法是這樣的,它可以從UI或後臺線程進行處理。這個功能也落入這個網絡。但我不希望它阻塞UI線程。所以我想檢測一下是否在UI線程上運行,如果是這樣,請將函數調用分支到後臺線程(可能ThreadPool
,但這對本次討論來說不是問題)。這是完全良好的行爲,但後臺線程可能依賴於函數的輸出,所以阻塞它們會更好,而UI線程以更「一勞永逸」的方式訪問它。
startupthread不一定是GUI線程或唯一的GUI線程。 – 2009-07-19 08:04:00
錯誤:InvokeRequired返回true,如果在「與創建控件的線程不同的線程上」 – 2012-11-01 11:38:38