c#线程阻塞或假死,求助
程序包含3个窗体,分别为F1,F2,F3(均在公共类中实例化),主程序运行时在program里面执行Application.Run(F1)后,出现F1窗体,点击按钮打开F2窗体,在F2里打开F3窗体。
运行一段时间后3个窗体出现假死情况,查资料后得知原来我点击按钮后仅执行 窗体名.show(),而3个窗体都是在UI线程上执行,于是我在F1里将按钮事件改为Application.Run(F2),然后在F2按钮事件同样方法改为Application.Run(F3),然后发现运行一段时间后F1和F2窗体均流畅,但F3窗体依然假死。
进一步发现因为F3中有定时器timer,当不执行定时器里面的代码时,F3运行很流畅,开始执行后,就慢慢的变得很不流畅。我的定时器一开始是FORM中的timer,后来改为THREAD类型的timer后,F3窗体反应依然迟钝。
于是我再改,在THREAD类型的timer中新开一个线程a,把要执行的代码放在新的函数B里,用a去调用B,本想着这样F3就应该不会阻塞了吧,可是没有效果。
不知是何原因。下面我贴出F3的代码。求教各位好心人!!
F3窗体代码
public System.Threading timer;//定义定时器
private void Botton1_Click(object sender, EventArgs e)//按钮事件启动定时器
{
timer = new System.Threading.Timer(
new System.Threading.TimerCallback(ha), null,
2000, 5000);
}
private void ha(Object a)//定时器内容
{
Thread a = new Thread(B);//新线程
a.Start();
}
private void B()
{
//要循环执行的代码
}