首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-09-12 
C# 死循环导致界面卡死问题winform程序我用一个timer控件 每200MS执行一次用来获取数据当获取到数据的时候

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: 引用:

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


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

热点排行