我試圖實現一種方法,當用戶將鼠標光標放入組件時,將觸發WPF中的UI事件。C#異步調度程序操作無法識別變量,因爲它開始
行爲應該是:
1)鼠標光標進入組件,調用方法mouseEnter
2)在1秒的計時器開始
3)如果光標仍處於組件,觸發事件(在這種情況下,打開擴展器)。
最初,這是使用Thread
完成的,但是現在使用Dispatcher
異步執行此操作。
當光標進入組件時,名爲mouseIn
的bool
設置爲true。 當光標離開組件時,mouseIn
設置爲false。
問題是,如果用戶將光標放入組件中,然後在1秒計時器過去之前將其移出組件,則delegate
仍然會看到mouseIn
爲真,即使我已確認它正在只要光標離開它就設置爲false。
void mouseEnter(object sender, MouseEventArgs e) {
mouseIn = true;
Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() => {
Thread.Sleep(1000);
if (mouseIn) {
exp.IsExpanded = true;
}
}
}
void mouseLeave(object sender, MouseEventArgs e) {
mouseIn = false;
}
async delegate
通常只在啓動點保持外部變量的狀態嗎? 如果是這樣,是否有辦法迫使它重新檢查價值,或失敗了,實現這種行爲的更好方法?
非常感謝。
感謝Yuval,那正是我需要的! – Alex
這充分說明了爲什麼阻止呼叫是邪惡的。善待你的線索! – kai