【发布时间】:2017-07-02 22:18:52
【问题描述】:
我正在创建一个项目,我在其中实例化多次相同的Form,其中包含一些Timers,很多背景工人,当然还有一些私有数组等等。
问题是……它不起作用。
我的意思是,我可以看到所有的表单,但 BWs 仅适用于第一个实例,而不适用于其他实例,即使 BW.isBusy() 返回 `false。
没有返回任何错误,他们只是不做他们应该做的事。
所以,我的问题是:某些 WinForm 组件,例如 BW,是否共享?
如果是,有办法绕过这个问题吗?
如果不是,这个问题的原因可能是什么?
抱歉,我无法向您显示源代码,甚至无法显示该软件的屏幕截图(它是为客户提供的)。
但是,如果您需要更多详细信息,我会分享。
以我正在使用的表单为例:
For (i = 0; i < 5; i++) {
Form1 f = New Form1();
f.Show();
}
提前感谢您的帮助。
【问题讨论】:
-
你可能只是把
static放在你不应该有的地方。 -
找不到任何问题。
-
您能告诉我们定时器和后台工作人员是如何初始化/创建的吗?
-
我在表单的设计中创建了它们。但理论上,每次我实例化一个新的 Form1 时它们都应该被复制(如果我有一个按钮,两个 Form1 没有相同的按钮,理论上它没有任何意义)。我稍后会尝试在运行时实例化它们。
-
表单不应共享任何私有资源/控件。
new Form1()将始终创建新实例。仅当您使用static/Shared关键字声明控件时才能共享它们。如果控件不是静态的,那么您在初始化多个实例时会出现问题。某些初始化逻辑未正确执行。为了找到真正的问题 - 显示/告诉BackgroundWorker做什么以及如何检查它是否不起作用。如果您在BackgroundWorkers之间共享了一些状态,那么在第一个实例启动后,其他工作人员可能会启动并立即完成
标签: .net forms winforms instance backgroundworker