窗体卡了,有好的解决办法吗?

hhc123 2011-07-07 12:36:39

void OpenPort()
{

try
{
mdm.Open();
mdm.Ring += new EventHandler<AEventArgs>(mdm_Ring);

}
catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
}
void mdm_Ring(object sender, AEventArgs e)
{
string phone = e.phoneNumber;
if (IsExitWindow()) //是否存在这个窗体
{

/*Thread th = new Thread(delegate()
{
Application.Run(new Form3());

});
th.Start();
代码1 用上这段代码的话数据传入Form3窗体不会卡,一个程序太多Application.Run(new Form3())的话
显得不好管理.
*/
new Form3().Show(); //代码2:用上这句,数据同样可以传入Form3但是窗体会卡住.
//有没有办法用代码2,又不让Form3卡啊.

//MessageBox.Show("电话号码为:"+phone);
Thread.Sleep(500);
if (ShowTel != null)
{
ShowTel(phone);
}







}
else
{
Thread.Sleep(500);
if (ShowTel != null)
{
ShowTel(phone);
}

}


}


public Form3()
{
InitializeComponent();
//Application.DoEvents();
MainFrm.ShowTel += new MainFrm.MyEventHandler(MainFrm_ShowTel);
}

void MainFrm_ShowTel(string Num)
{
SetListBox1(Num);
}
private delegate void SetListBoxCallback1(string str);
public void SetListBox1(string str)
{
//比较调用SetListBox方法的线程和创建listBox1的线程是否同一个线程
//如果不是,则listBox1的InvokeRequired为true
if (listBox1.InvokeRequired)
{
SetListBoxCallback1 d = new SetListBoxCallback1(SetListBox1);

listBox1.Invoke(d, str);
}
else
{
//结果为false,直接执行
listBox1.Items.Add(str);
listBox1.SelectedIndex = listBox1.Items.Count - 1;
listBox1.ClearSelected();
}
}
...全文
111 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycproc 2011-07-07
  • 打赏
  • 举报
回复
为什么要休眠呢?

你try catch 一下

看看 能catch到什么?
hhc123 2011-07-07
  • 打赏
  • 举报
回复

private void ThreadFunc()
{
MethodInvoker mi = new MethodInvoker(this.ShowForm);
this.BeginInvoke(mi);
}
private void ShowForm()
{
Form2 temp = new Form2();
temp.Show();
}

private void button2_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(ThreadFunc));

// th.ApartmentState = ApartmentState.STA;
th.Start();
}

找个解决方法啊,如上,
  • 打赏
  • 举报
回复
不做winform,顶人气,
xuexiaodong2009 2011-07-07
  • 打赏
  • 举报
回复
/*Thread th = new Thread(delegate()
{
Application.Run(new Form3());

});
th.Start();

使用多线程啊,没必要使用Application.Run(),
这样不行吗?或者使用委托
new Form3().Show();

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧