理论上来说,多线程的情况下,副线程对于界面UI控件的访问是需要通过写委托,交给主线程,也就是UI线程来实现的。
但是我实际编码过程中,我发现,如果在副线程中写委托而直接方位UI控件,这种情况下,在VS的调试模式下,会提示无法在非创建UI的线程中访问UI资源。但是,如果不是通过VS来调试,而是直接在debug文件夹下双击EXE文件执行的话,程序是可以正常执行的。
虽说这种违规的操作带来了很大的危险性,但是毕竟在控制好访问时机的情况下,是可行的(虽然很难控制就是了)。
请哪位大牛,能够解释下原因:为什么系统会允许跨线程访问UI资源。
但是我实际编码过程中,我发现,如果在副线程中写委托而直接方位UI控件,这种情况下,在VS的调试模式下,会提示无法在非创建UI的线程中访问UI资源。但是,如果不是通过VS来调试,而是直接在debug文件夹下双击EXE文件执行的话,程序是可以正常执行的。
虽说这种违规的操作带来了很大的危险性,但是毕竟在控制好访问时机的情况下,是可行的(虽然很难控制就是了)。
请哪位大牛,能够解释下原因:为什么系统会允许跨线程访问UI资源。
Debugger的IsAttached属性,比如设置Form的Text为this.Text = System.Diagnostics.Debugger.IsAttached.ToString();你会发现,VS调试状态下this.Text="True",直接运行Debug程序则是this.Text="False"建议你如果在线程中要操作UI元素,用Control.Invoke
创建窗体之后的线程成为UI线程,拥有消息循环,因此与普通线程相比,它是“特殊”的