爲什麼Winform不允許跨線程修改UI線程控件的值?

在vs2003下,使用子線程調用ui線程創建的控件的屬性是不會有問題的,但是編譯的時候會出現警告,但是vs2005及以上版本就會有這樣的問題,下面是msdn上的描述
  "當您在 Visual Studio 調試器中運行代碼時,如果您從一個線程訪問某個 UI 元素,而該線程不是創建該 UI 元素時所在的線程,則會引發 InvalidOperationException。調試器引發該異常以警告您存在危險的編程操作。UI 元素不是線程安全的,所以只應在創建它們的線程上進行訪問"
  從上面可以看出,這個異常實際是debugger耍的花招,也就是說,如果你直接運行程序的exe文件,或者利用運行而不調試(Ctrl+F5)來運行你的程序,是不會拋出這樣的異常的.大概ms發現v2003的警告對廣大開發者不起作用,所以用了一個比較狠一點的方法.
  不過問題依然存在:既然這樣設計的原因主要是因爲控件的值非線程安全,那麼DotNet framework中非線程安全的類千千萬萬,爲什麼偏偏跨線程修改Control的屬性會有這樣嚴格的限制策略呢?
  這個問題我還回答不好,希望博友們能夠予以補充

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章