窗体卡了,有好的解决办法吗?
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();
}
}
...全文
相关推荐
winform泛型类窗体继承解决办法C#小Demo
该项目演示了如何在C# WinForm应用中通过泛型基类BaseForm<T>实现窗体的泛型化继承。子窗体如Int32Form继承该基类,并针对不同数据类型(如Int32、String)复用界面逻辑,
C# 关于窗体继承后,控件事件触发两次的问题解决办法
有时多个窗体功能相同,控件繁多,重新布局费时费力,因此可以利用窗体继承来实现相似功能的窗体。但是在继承窗体后,我们会发现触发继承窗体上的控件时,被继承窗体的相应的控件也会被触发一次。这是因为继承窗体总是会执行被继承窗体的虚方法。 比如form2继承自form1,form1中有一个button,那么相应的form2中也会有一个button,如果我们仅是触发form2中button的click事件的话,form1的button的click也会被触发。 看下面这个例子 private void button1_C
QQ窗体_QQ窗体源代码_qq905卡屏代码_
在压缩包中的"QQ窗体"文件很可能是包含整个项目的源代码,包含了类、窗体、资源等所有组成部分。
模仿卡巴基斯渐变窗体
【描述】:描述中的“模仿卡巴基斯渐变窗体”简明扼要地表达了开发者试图在自己的项目中复制或实现与卡巴基斯渐变效果相似的窗体界面。
窗体假死现象的解决办法
本文将深入探讨窗体假死的原因,并提供相应的解决策略。### 窗体假死的原因1. **长时间计算**:在主线程上执行耗时的操作,如大数据量的循环、复杂的算法计算,会使得主线程无法及时响应UI事件。2.



