Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 背景工作人员在遭遇时冻结。可见属性_Vb.net_Winforms_Backgroundworker_Visible - Fatal编程技术网

Vb.net 背景工作人员在遭遇时冻结。可见属性

Vb.net 背景工作人员在遭遇时冻结。可见属性,vb.net,winforms,backgroundworker,visible,Vb.net,Winforms,Backgroundworker,Visible,每当我试图根据逻辑将控件的可见性设置为visible=true或visibile=false时,我的UI就会挂起。我可以在设计器中将表单上的所有内容都设置为True,并且后台工作人员处理我放入表单中的逻辑时不会有任何问题,但是每当我必须从可见的True/false切换时,它就会挂起应用程序。这是因为我试图在UI线程之外的任何地方设置UI的可见性时发生了一些交叉线程吗?如果是这样,为什么我可以更改控件的文本属性而没有任何问题,但visible给了我一些问题?是的,您正在崩溃,因为在后台线程上执行U

每当我试图根据逻辑将控件的可见性设置为visible=true或visibile=false时,我的UI就会挂起。我可以在设计器中将表单上的所有内容都设置为True,并且后台工作人员处理我放入表单中的逻辑时不会有任何问题,但是每当我必须从可见的True/false切换时,它就会挂起应用程序。这是因为我试图在UI线程之外的任何地方设置UI的可见性时发生了一些交叉线程吗?如果是这样,为什么我可以更改控件的文本属性而没有任何问题,但visible给了我一些问题?

是的,您正在崩溃,因为在后台线程上执行UI命令。您可以在该线程上执行任何非UI逻辑,然后使用dispatcher更改.visible或其他UI控件的实际值-请参阅:

后台线程并不意味着对UI有任何了解。我一直在环顾四周,看到有人使用bgw来帮助加快显示UI的过程,但这并不正确。你想加速什么?我使用的UI上有50多个控件,每个控件都有逻辑(数据、可见、启用等),希望用大量逻辑(主线程)处理控件,而不是用逻辑(bgw)处理较小类型的控件,以加快窗口的加载过程。加载花了6秒的时间现在花了2秒,但希望确保这是正确的方法,并找出可见属性的问题。您需要使用委托从后台工作程序修改UI线程上的任何控件,这是有意义的。请问为什么我可以在没有冻结的情况下修改表单上标签的.text属性?只有在尝试修改一些选定属性(已启用、可见等)时,才会冻结。