相关疑难解决方法(0)

在非UI线程中创建控件

我有一种插件模型,其中各种复杂的用户控件存储在DLL中,并在运行时加载和实例化使用

Activator.CreateInstanceFrom(dllpath, classname).
Run Code Online (Sandbox Code Playgroud)

由于我正在加载其中的一些,我想在后台执行它,通过创建一个新线程来执行加载来保持我的UI响应.然后,控件将作为主窗体的父级,并在需要时显示.

这似乎工作正常 - 直到我尝试在其中一个用户控件上的任何嵌套控件上设置任何属性,例如在按钮的事件处理程序中,这会引发交叉线程异常.我确实通过每次访问属性时检查InvokeRequired都可以避免这种情况,但是在为用户控件编写代码时我宁愿不必担心(特别是因为还有其他人编写这些代码也可能并不总是记得).

所以我的问题是,是否有任何安全的方法来做我正在尝试的事情,或者我应该如何最好地在后台加载这些控件?或者它基本上是不可能的,我是否必须坚持主线程来创建控件?

我希望我提供的信息足以使我的情况清楚; 如果没有,我很乐意详细说明并提供代码示例.

.net controls multithreading winforms

7
推荐指数
1
解决办法
2453
查看次数

标签 统计

.net ×1

controls ×1

multithreading ×1

winforms ×1