我有一个插件模型,其中各种复杂的用户控件存储在DLL中,并在运行时使用加载和实例化。
Activator.CreateInstanceFrom(dllpath, classname).
由于我要加载很多这样的控件,所以我想在后台创建一个新线程来进行加载,以保持我的用户界面响应。然后将这些控件作为主窗体的子控件,并在需要时显示。
这似乎很好用,但是当我尝试设置其中一个用户控件上任何嵌套控件的属性时(例如,在按钮的事件处理程序中),就会抛出跨线程异常。我确实意识到,每次访问属性时都可以通过检查InvokeRequired来避免此问题,但我不想在编写用户控件的代码时担心这个问题(特别是因为其他人也在编写这些代码,他们可能不总是记得)。
所以我的问题是,有没有安全的方法来实现我正在尝试的操作,或者我应该如何最好地在后台加载这些控件?还是基本上不可能,我必须坚持使用主线程来创建控件?
我希望我提供的信息足以说明我的情况;如果不够清晰,我很乐意详细说明并提供代码示例。