软件: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(() =>
{ }
到这里问题就已经解决了,希望能够帮助一些道友。