您的位置:首页 > 其它

定时显示一个提示窗口

2011-06-28 16:02 169 查看
用线程,定时启动一个程序,就是每个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
}

// /article/5899954.html]]>

// if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 38378;
var cb_entryId = 1290048;
var cb_blogApp = "chg2001868";
var cb_blogUserGuid = "593f420b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2008/9/12 16:36:00';
// ]]>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐