WPF是的界面控件是基於綁定的,很多直接操作的方法都消失了,通過屬性的改變自動響應。那么就帶來了一個響應速度問題了,比如我點擊右鍵菜單,響應Click事件,按理說菜單消失后執行我要的事件,但實際上卻是先執行我設定的Click事件,然后菜單才會消失,如果執行時間很長,雖然我鎖定了界面不能隨便亂點,並給了SplashScreen來提示用戶進度,但是一旁彈出的右鍵菜單卻死活不會消失,難看死了。因此需要一個功能——事件延遲觸發,等待菜單消失后再觸發Click事件,這樣就可以讓界面完成它該有的刷新動作后,再把界面鎖定。
public class WpfApplication { public static void DoWork(Action action, int millisecond = 300) { new Action<Dispatcher, Action, int>(DoWorkAsync).BeginInvoke(Dispatcher.CurrentDispatcher, action, millisecond, null, null); } static void DoWorkAsync(Dispatcher dispatcher, Action action, int millisecond) { System.Threading.Thread.Sleep(millisecond); dispatcher.BeginInvoke(action); } }
使用時只要在事件處理函數中,調用DoWork這個靜態方法即可,將原先要處理的內容包裝到另一個方法中去,作為參數傳遞給DoWork。如果還需要額外參數,最好通過全局變量直接訪問,一定要設置為局部變量的,那就自己再添加個帶附加參數的DoWork方法吧。