日期:2014-05-19  浏览次数:20813 次

(求助)在C#里由事件自动触发的窗口为何不能响应?
我有一个窗口,需要要定时显示。于是我设计了一个定时器,让它定时引发一个事件,然后该事件调用显示窗口的方法显示窗口。当方法是用ShowDiaolg()时,窗口可以正常显示,但这样一来该窗口会挡住其它窗口,所以只能用Show()方法。但当用Show()方法时,窗口在显示的时候有些控件不能显示出来,而且点击该窗口时,也会出现“窗口没有响应”的提示,不知各位朋友是否可帮分析一下原因?

------解决方案--------------------
showdialog是模态,show是非模态,
但是理论上控件都该显示出来的。有点怪异
------解决方案--------------------
估计是你运行了其他代码
------解决方案--------------------
有点怪,

你可以单步测试下
------解决方案--------------------
ShowDiaolg()
其实是用子线程之行的,但是没有关闭它之前其他窗口是不能激活的
Show()
在主线程执行要等执行结束,窗口才能全部看见或者可动。
建议用begininvoke来执行委托
------解决方案--------------------
mark
------解决方案--------------------
up............
------解决方案--------------------
帮你UP下
------解决方案--------------------
同意eyu660 利用委托
声明
private delegate void OpenFormEvent();
private void ShowForm()
{
Form2 form2_1 = new Form2();
form2_1.Show();
}
在Timer中调用 this.BeginInvoke(new OpenFormEvent(ShowForm));即
public void TimerMethod(Object state) // 该方法显示提示时间到窗口(Form2)
{
this.BeginInvoke(new OpenFormEvent(ShowForm));
}
------解决方案--------------------
你只是现在窗体 ,首先先判断窗体是否存在,存在就现在 不存在就创建 然后显示
private Form2 form2_1;

private void ShowForm()
{
if(form2_1 != null)
form2_1 = new Form2();
form2_1.Show();
}