我想仅在需要显示气球提示时显示系统任务栏图标,然后在气球提示关闭时隐藏图标。使用计时器时未启动事件处理程序
然而,一旦显示的图标,我不能让它消失,因为事件处理函数不是解雇:从由定时器触发的方法
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