各位大侠,最近遇到一个问题:
程序中对接收到的socket消息进行解析,其中一类消息的解析时需要根据情况弹出一个窗口A,显示接收的消息,并在窗口中更新接收时间的信息;现在我在解析类中声明了一个窗口类的实例,再在接受消息时根据全局参数控制窗口的显示;在没有接收到这类消息的时候窗口只是声明好了,但是从未弹出过;我在想让窗口弹出时使用下面代码,结果发现窗口是出来了,但是程序就此处于忙碌状态,开始还可以把窗口拖动一下,但是拖动后把鼠标放到弹出的窗口上就变成了忙碌状态,无法进行其他的操作;而且,如果弹出窗口被其他窗口遮盖住了,尽管它还在任务栏存在,但是再也点击不出来了。
if (frm.Visible == false)
{
frm.Visible = true;
}
我尝试过用
frm.show()方法,效果一样最后用杀手锏,新开一个线程,调用application.run(frm)的方法,这下倒是好了!不过在vs2005下调试时又会出现”从不是创建此控件的线程访问它“的提示;我觉得没必要单开一个线程去让窗口显示,那还有什么方法呢?
对windows编程的底层不太懂,请各位高手支招,告诉下这是怎么回事?不胜感激!
程序中对接收到的socket消息进行解析,其中一类消息的解析时需要根据情况弹出一个窗口A,显示接收的消息,并在窗口中更新接收时间的信息;现在我在解析类中声明了一个窗口类的实例,再在接受消息时根据全局参数控制窗口的显示;在没有接收到这类消息的时候窗口只是声明好了,但是从未弹出过;我在想让窗口弹出时使用下面代码,结果发现窗口是出来了,但是程序就此处于忙碌状态,开始还可以把窗口拖动一下,但是拖动后把鼠标放到弹出的窗口上就变成了忙碌状态,无法进行其他的操作;而且,如果弹出窗口被其他窗口遮盖住了,尽管它还在任务栏存在,但是再也点击不出来了。
if (frm.Visible == false)
{
frm.Visible = true;
}
我尝试过用
frm.show()方法,效果一样最后用杀手锏,新开一个线程,调用application.run(frm)的方法,这下倒是好了!不过在vs2005下调试时又会出现”从不是创建此控件的线程访问它“的提示;我觉得没必要单开一个线程去让窗口显示,那还有什么方法呢?
对windows编程的底层不太懂,请各位高手支招,告诉下这是怎么回事?不胜感激!
control的invoke调用此方法,否则直接使用控件如在窗体类中定义一个方法:
FormVisible()
{
if (this.invokerequired)
{
this.invoke(FormVisible);
}
else
{
this.visible = true;
}}