当前位置:主页 > 汽车防滑垫 >

WinForm UI跨线程访问Debug模式与非Debug模式下的区别

发布时间:19-12-06 阅读:302

首先就从一个实验开始提及吧。在VS中建一个WinForm的工程,在界面上就放一个Label和一个Button,然后为按钮添加一个点击事故,改动代码如下:

private void button1_Click(object sender, EventArgs e)

{Thread thread = new Thread(() => {

this.label1.Text = "Thread Test";});

thread.Start();

}

然后我们按F5进入调试模式,点击Button之后,我们就会获得以下这个差错:

然则假如我们按Ctrl+F5来运行这个法度榜样,那么就不会有这个差错。你直接在该工程下的Debug目录中运行该法度榜样也不会有这个差错发生。这是为什么?假如认识WinForm开拓的人都应该知道一个原则便是不要在非UI线程去操作UI界面,然则微软并没有强制要求法度榜样员必须这么做,以是实际运行法度榜样的时刻,并没有UI跨线程造访的反省,这个反省只有在Debug模式下才会有,也方便法度榜样员调试时避免UI跨线程的造访。我们可以用Reflctor查看Cotrol类下的静态构造函数中,就可以看到如下代码:

static Control()

{checkForIllegalCrossThreadCalls = Debugger.IsAttached;

}

参考链接:

http://mikedoszhang.blogspot.com/2011/10/non-ui-thread-operate-ui.html#!/2011/10/non-ui-thread-operate-ui.html

http://stackoverflow.com/questions/2587930/ramifications-of-checkforillegalcrossthreadcalls-false



上一篇:滴滴顺风车公告:所有用户服务时间均为5002000
下一篇:“绝无仅有的机遇不容错失”——第二届进博会