我想僅在需要顯示氣球提示時顯示系統任務欄圖標,然後在氣球提示關閉時隱藏圖標。使用計時器時未啓動事件處理程序
然而,一旦顯示的圖標,我不能讓它消失,因爲事件處理函數不是解僱:從由定時器觸發的方法
public partial class MainWindow : Window {
public static NotifyIcon trayIcon = new NotifyIcon();
public MainWindow() {
InitializeTrayIcon();
}
void InitializeTrayIcon() {
trayIcon.Text = "My App";
trayIcon.Icon = MyApp.Properties.Resources.myIcon;
trayIcon.Visible = false;
//the following never gets fired:
trayIcon.BalloonTipClosed += (sender, e) => {
trayIcon.Visible = false;
};
}
public static void ShowTrayNotification(ToolTipIcon icon, string title, string text, int duration) {
trayIcon.Visible = true;
trayIcon.ShowBalloonTip(duration, title, text, icon);
}
}
的ShowTrayNotification()
被稱爲:
public abstract class Watcher {
protected System.Timers.Timer myTimer = new System.Timers.Timer(1000);
//the following is called in a subclass of Watcher, which is instantiated in MainWindow
protected void SetupMyTimer() {
myTimer.AutoReset = true;
myTimer.Elapsed += myTimer_Elapsed;
myTimer.Start();
}
protected virtual void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
myTimer.Enabled = false;
MyTimerElapsedCallback();
myTimer.Enabled = true;
}
void MyTimerElapsedCallback() {
MainWindow.ShowTrayNotification(ToolTipIcon.Info, "Hello There!", "Balloon text here.", 5000);
}
}
因此顯示氣球。但BalloonTipClosed
在MainWindow
從未被解僱。
我曾嘗試:
把(1)創建
NotifyIcon
的,(2)氣球的顯示,和(3)MainWindow
設置BalloonTipClosed
一切,它工作正常(即BalloonTipClosed
是燒製)推杆(1),(2)和(3)在
SetupMyTimer()
並能正常工作以及推杆(1),(2)和(3)在
MyTimerElapsedCallback()
和而不是工作(即,BalloonTipClosed
沒有解僱)改變
BalloonTipClosed
到BalloonTipClicked
和它不工作爲好。使用非lambda BalloonTipClosed EventHandler,不是工作。
這一點,我想這個問題已經通過定時器做的,但我不知道它是如何影響事件處理,也不怎麼解決。
任何想法?
你在你的MainWindow中調用SetUpMyTimer嗎? – apomene
@apomene不直接。在MainWindow中,我創建了一個新的WatcherSubclass,它最終調用SetupMyTimer()' – Obay