当前位置: 代码迷 >> 综合 >> C#跨线程更新更新窗体控件
  详细解决方案

C#跨线程更新更新窗体控件

热度:98   发布时间:2023-11-02 11:31:55.0

软件:VS2015

平台:win10;

坑:

通过开启一个线程去更新显示窗体的运行时间,编译运行之后程序并没有发现什么问题,但是在关闭窗体的时候就直接出异常了,在开启的新线程种提示显示的更新的窗体已经被释放了,网上查看 了不少资料,什么用标志符去做if判断的啊,用this.dispose的啊,还有说是用this.beigininvoke的异步的方式,但是好像 对我来说就像是魔咒一样,通通不行。部分源代码如下:

   while (true)
            {
                string Diffrenttime = null;
                DateTime Endtime = DateTime.UtcNow;
                TimeSpan Runtime = Endtime.Subtract(begintime).Duration();

                    This.Invoke(new Action(() =>
                    {
                        // 用对象选择需要显示的时间差,如:天,小时,分钟,秒
                        Diffrenttime = Runtime.Days.ToString() + "天" +
                              Runtime.Hours.ToString() + "小时" +
                              Runtime.Minutes.ToString() + "分钟" +
                              Runtime.Seconds.ToString() + "秒";
                        TB_Counttime.Text = Diffrenttime;
                    }));

解决方案:

通过寻找问题所在和请教大佬,发现问题就是出现用This这个导致的问题,罪魁祸首找到了那就是要解决他了,将This替换成如下的代码:

                    TB_Counttime.Invoke(new Action(() =>
                    {                                                   }

到这里问题就已经解决了,希望能够帮助一些道友。
            

  相关解决方案