最近在项目中用到了多线程,其实就是一个线程获取数据,然后通知主线程更新数据,那个获取数据的方式是一直运行的,public Thread GetMeg =null;
public void Get()
        {
            GetMeg = new Thread(new ThreadStart(getMessage));
            GetMeg.IsBackground = true;
            GetMeg.Start();
        }
这是我调用获取数据的方式getMessage 方法是一个http获取的方式,循环执行,
目前遇到一个问题,这个多线程在有时候成功,有时候没有效果(getMessage 方法执行,但是UI假死),请教一下,这是是不是我代码中调用线程的访问存在问题导致的?C#多线程UI

解决方案 »

  1.   

    你贴出的代码是没问题的,不会导致UI假死,你最好把getMessage函数贴出来,估计问题在这里。
    目测可能存在的问题:
    1.getMessage循环获取数据时没有加sleep
    2."通知主线程更新数据"这里有问题
      

  2.   

    我的getMessage方法是用委托的方式通知ui,弹出MessageBox的public void getMessage()
            {
                while (true)
                {
                    //Application.DoEvents();
                   {
                        BunnTools.FilesTool.WriteToFile(Application.StartupPath + "\\Applog.log", "消息记录:" + Environment.NewLine + DateTime.Now + "  " + "执行一次   " + GetMeg.GetApartmentState().ToString(), false);
                        string message = GetMessage();                    if (this.Messagage != null)
                        {
                            this.Messagage((message));
                        }
                    }
                }
            }现在我的GetMessage();这个方式是访问http的,很耗时,我就修改成了现在的多线程循环调用,得到返回信息,委托传递给主线程,是不是我的思路就有问题呢?
      

  3.   

    1 不要在线程里更新UI
    2 线程写LOG文件以方便测试
      

  4.   

    直接使用BackgroundWorker这个控件,具体参考:http://www.cnblogs.com/zhili/archive/2013/05/11/EAP.html
      

  5.   

    我是那个GetMessage()http访问的方法,耗时太久,对多线程不了解,你说的线程太快是什么情况?