我正在构建将留在托盘中的应用程序,有时会进行服务调用,如果服务返回结果,它会在右下角显示为漂亮的窗口。
我找到了漂亮的组件作为代码项目 - http://www.codeproject.com/Articles/277584/Notification-Window
如果在表单应用程序中使用此通知,则此通知有效,但当我尝试从ApplicationContext显示它时,它会停止我的应用程序 - 通知显示,但是当我尝试单击它时,我没有得到响应错误。
class TrayContext : ApplicationContext
{
private System.Timers.Timer appointmentTimer;
private PopupNotifier notification;
public TrayContext()
{
notification = new PopupNotifier
{
AnimationDuration = 500,
ContentFont = new System.Drawing.Font("Tahoma", 8F),
Image = null,
OptionsMenu = null,
Scroll = false,
ShowHandCursor = false,
Size = new System.Drawing.Size(400, 100),
TitleFont = new System.Drawing.Font("Segoe UI", 11.25F)
};
//timer
appointmentTimer = new System.Timers.Timer();
appointmentTimer.Interval = 600000;
appointmentTimer.Elapsed += AppointmentTimerTimerElapsed;
appointmentTimer.Start();
}
private void AppointmentTimerTimerElapsed(object sender, ElapsedEventArgs e)
{
appointmentTimer.Stop();
notification.TitleText = "Test";
notification.ContentText = "This should work";
notification.Popup();
appointmentTimer.Start();
}
}
这是我得到的行为(光标忙而不是指针):
我试图使用委托来做这件事,但因为我正在使用ApplicationContext,我没有BeginInvoke方法,但即使像下面那样添加它也无济于事:
private void BeginInvoke(Delegate callback, object[] args)
{
syncContext.Post(state => callback.DynamicInvoke((object[])state), args);
}
我能够从Form中显示此通知,但我应该如何从ApplicationContext中显示它?
答案 0 :(得分:0)
我已经弄明白了。
我正在使用:
private System.Timers.Timer appointmentTimer;
它应该是:
private System.Windows.Forms.Timer appointmentTimer;
但对此可能有更好的解决方案。我没有把我的答案标记为正确,因为我会等待更长时间以获得更好的答案。