定时显示一个提示窗口
用线程,定时启动一个程序,就是每个30s在右下角弹出提示窗。
首先找到了一个右下角提示窗的demo,然后嵌进我的程序,发现无效
唯一的区别就是demo里是用按钮点击一下显示一下窗口,在我的程序里需要通过线程调出这个窗口,发现不起作用了
网上也找到有人遇到相同的问题,原因记录如下:
当程式运行时,我们已开启了一个线程,ui 线程. 而平时的一般工作,比如说新开窗口啦,按钮事件啦,这都是在ui 线程的管辖之下。而假如我们新建一个线程,当这个线程需要调用一个新窗口的时候,不能够直接在这个新线程之下调用,而是需要让ui 线程去调用新窗口。而新的线程所做的是给ui线程发送一条信息,让他打开窗口。而做这一步,我们就需要用到delegate 技术。 假如一个控件的处理程式和操作他的代码不在同一线程中,则需要使用 控件名.invoke 方法
代码片断如下:
//工作线程的代码将直接调用form下定义的formshow方法
listenerthread()
{
//这是个自由线程。不能在这里直接调用一个窗体
formshow();//ok
}
delegate void formhandler(dataset ds);//声明一个委托
//定义一个方法此方法用来显示一个窗体
private void formshow(dataset ds)
{
if (!this.invokerequired) //假如当前线程不是主ui线程,返回true,否则,返回false.
{
frmbills fb = new frmbills();
fb.show();
fb.display(ds);
}
else
{
formhandler fhandler = new formhandler(this.formshow); //创建一个新instance指向formshow.
this.invoke(fhandler, new object[] {ds}); //启动delegate
}