Control.Invoke在擁有控件底層窗口句柄的線程上執行指定的委託。爲什麼需要Control.Invoke?
多年來,我剛剛接受,這是它必須的方式,但我從來沒有明白爲什麼。
我能想到的唯一的事情是代碼是非常不安全的代碼,而不是僅僅在控制代碼中添加一點同步,框架只是不允許它,並迫使我們放棄這條路線 - 洗澡水!
難道是微軟懶惰,還是有東西我只是沒有得到?
做其他的編程框架/其他操作系統也有類似的問題,還是僅僅是一個Windows的事情嗎?
除了改變我們的應用程序中的每個功能,有沒有辦法解決它?
好吧,我明白不想有額外的性能開銷,但難道不類似的開銷框架調用Control.Invoke本身,而不是提高「跨線程操作無效:控制‘的名字在這裏’從訪問一個線程,而不是它創建的線程「異常? – 2009-12-29 09:43:30
調用Control.Invoke有一定的責任,框架不能簡單地假定應用程序知道。例如,如果你不小心,你可以創建死鎖情況,如果框架只是爲你做的,它可能會在你不知情的情況下創建死鎖。這是一個很好的例子http://social.msdn.microsoft.com/forums/en-US/clr/thread/a35e5298-33c4-4461-b956-bf265484219e – 2009-12-29 09:48:08
好吧,是的,我明白這一點。謝謝,這有點讓我感到困惑! – 2009-12-29 10:21:44