读书人

C# 死循环导致界面卡死有关问题

发布时间: 2013-09-12 22:07:00 作者: rapoo

C# 死循环导致界面卡死问题
winform程序 我用一个timer控件 每200MS执行一次 用来获取数据 当获取到数据的时候 会弹出新窗体 但是弹出的新窗体会卡死
在不停用该timer控件的情况下 怎么优化其性能 (试过用线程 但好像也有这样的问题 不知道是不是我线程没写好) c# winform 线程 优化
[解决办法]
BeginInvoke 委托开启新窗体!
[解决办法]
说得太笼统!天知道你代码怎么写的。
[解决办法]
http://www.cnblogs.com/Zeech-Lee/archive/2011/10/14/2212376.html
[解决办法]
你timer线程中创建的窗体肯定没时间响应你的动作,因为线程都一直在工作。正确做法是在主窗口中提供一个方法用于调用委托显示新窗体。
[解决办法]


private void ShowMsg(string msg)
{
if (this.InvokeRequired)
{
Action<string, bool> at = ShowMsg;
this.Invoke(at, msg);
}
else
{
//显示窗口代码
new FormMsg(msg).Show();
}
}

[解决办法]
引用:

private void ShowMsg(string msg)
{


if (this.InvokeRequired)
{
Action<string, bool> at = ShowMsg;
this.Invoke(at, msg);
}
else
{
//显示窗口代码
new FormMsg(msg).Show();
}
}


代码考过来没改完,改成:

private void ShowMsg(string msg)
{
if (this.InvokeRequired)
{
Action<string> at = ShowMsg;
this.Invoke(at, msg);
}
else
{
//显示窗口代码
new FormMsg(msg).Show();
}
}

[解决办法]
文字表达不好的,直接帖出代码,这是最好解决问题的办法
[解决办法]
求帮忙啊 大神们...
[解决办法]
代码在8楼 不能沉啊
[解决办法]
你的程序每两百毫秒会弹出一个窗体,也就是说不停的弹出,你说会卡死吗、?搞不懂你为什么这样做
[解决办法]
引用:
你的程序每两百毫秒会弹出一个窗体,也就是说不停的弹出,你说会卡死吗、?搞不懂你为什么这样做

接受到信息的时候(有判断)才会弹出 用的单例模式 只弹出一个窗体
[解决办法]
如果没有应用到其他主线程东西,你就在线程直接new Form().Show()也是可以的
[解决办法]
引用:
如果没有应用到其他主线程东西,你就在线程直接new Form().Show()也是可以的

就timer控件在执行 帮忙看看代码 在8楼
[解决办法]
timer过于频繁,主线程又会占着,你就改成Thread线程去处理
放到Load事件启动
Thread _th=new Thread(new ThreadStart(Helper));
_th.Start();

void Helper()
{
while(!isBreak)
{
Phone?ph?=?new?Phone();
????????????AddPhone(ph);
????????????if?(first?==?0)
????????????{
????????????????GetPhone_RunningEvent(null);
????????????????first++;
????????????}
Thread.Sleep(200);//每200MS一次
}
}

public void AddPhone(Phone ph)
{
try
{
StringBuilder str = new StringBuilder();
int count = LClient.LClientRcv(str);
if (!string.IsNullOrWhiteSpace(str.ToString()))
{
ph = PhoneCon(str.ToString());
if (ph.Number != null)
{
waitPhone.Add(ph);
//新窗口,直接弹出不用委托
// this.BeginInvoke(new BeginInvokeCreateForm(GetPhone_RunningEvent));
}


}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
[解决办法]
那你就在定时器里加Appliction.DoEvents()
[解决办法]
在弹出新窗体之前把timer stop()一下,处理完了重新start()
[解决办法]

引用:
Quote: 引用:

你的程序每两百毫秒会弹出一个窗体,也就是说不停的弹出,你说会卡死吗、?搞不懂你为什么这样做
接受到信息的时候(有判断)才会弹出 用的单例模式 只弹出一个窗体


那每次都有数据呢?是不是设计的有问题

读书人网 >C#

热点推荐