我有兩個線程,主要和另一個,我創建了一些工作。 我不明白當我從另一個線程調用originalContext.Post(主線程的SyncronizationContext)時會發生什麼,當主線程已經終止時,其中一些UI元素被更新?這是安全的嗎?爲什麼?當主線程終止時,SynchronizationContext會發生什麼?
在此先感謝。
我有兩個線程,主要和另一個,我創建了一些工作。 我不明白當我從另一個線程調用originalContext.Post(主線程的SyncronizationContext)時會發生什麼,當主線程已經終止時,其中一些UI元素被更新?這是安全的嗎?爲什麼?當主線程終止時,SynchronizationContext會發生什麼?
在此先感謝。
這當然不會達到很好的效果。它取決於實際的同步提供者,有多個。嘗試着重於常見的一些,WindowsFormsSynchronizationContext和WpfSynchronizationContext。兩者都會從隊列中清除所有待處理的帖子,他們會消失無蹤。如果您繼續發佈,則Winforms將引發InvalidOperationException。 Wpf更復雜,它可以設置DispatcherOperation.Status字段來表明它不起作用。但就我所知,這個字段並沒有被上下文代碼所遵守,所以它應該在默默無聞的情況下落入這個位桶。
顯然你不希望發生這種情況。簡單的解決方法是Thread.IsBackground = true,讓CLR清除混亂,通常不需要讓程序在沒有UI的情況下繼續。