.NET同一表单的多个实例是否共享资源?

.NET同一表单的多个实例是否共享资源?,.net,forms,winforms,instance,backgroundworker,.net,Forms,Winforms,Instance,Backgroundworker,我正在创建一个项目,在该项目中,我多次实例化相同的表单,其中包含一些计时器、大量后台工作人员,当然还有一些私有数组等 问题是。。。它不起作用 我的意思是,我可以看到所有的表单,但是BWs只对第一个实例有效,而对其他实例无效,即使BW.isBusy()返回'false'。 没有返回任何错误,他们只是没有做他们应该做的 所以,我的问题是:一些WinForm组件,比如BW,是共享的吗 如果是,有办法绕过此问题吗? 如果没有,这个问题的原因是什么 很抱歉,我无法向您显示该软件的源代码,甚至无法显示该软件

我正在创建一个项目,在该项目中,我多次实例化相同的表单,其中包含一些计时器、大量后台工作人员,当然还有一些私有数组等

问题是。。。它不起作用

我的意思是,我可以看到所有的表单,但是
BW
s只对第一个实例有效,而对其他实例无效,即使
BW.isBusy()
返回'false'。 没有返回任何错误,他们只是没有做他们应该做的

所以,我的问题是:一些WinForm组件,比如BW,是共享的吗

如果是,有办法绕过此问题吗?
如果没有,这个问题的原因是什么

很抱歉,我无法向您显示该软件的源代码,甚至无法显示该软件的屏幕截图(它是为客户提供的)。
但是如果你需要更多的细节,我会与你分享

为了举例说明我正在使用的表单,如下所示:

For (i = 0; i < 5; i++) {
     Form1 f = New Form1();
     f.Show();
}
(i=0;i<5;i++)的
{
Form1 f=新的Form1();
f、 Show();
}
提前感谢您的帮助。

我为我的问题找到了一个“解决方法”
我没有实例化N乘以表单,而是启动N带有所需参数的单独进程

For (i = 0; i < 5; i++) {
  ProcessStartInfo pHelp = new ProcessStartInfo();
  pHelp.FileName = My.Application.Info.DirectoryPath + "\mySoft.exe";
  pHelp.Arguments = arg1 + "," + arg2 + "," + arg3;
  pHelp.UseShellExecute = true;
  pHelp.WindowStyle = ProcessWindowStyle.Normal;
  Process proc = Process.Start(pHelp);
}

这不是最好的解决方案,但是问题消失了,在我的例子中,有多个进程而不是多个表单是可以的。

你可能只是把一个
静态的
放在你不应该放的地方。找不到任何错误。你能告诉我们计时器和后台工作程序是如何初始化/创建的吗?我在表单的设计中创建了它们。但理论上,每次我引用一个新的Form1时,它们都应该被复制(如果我有一个按钮,两个Form1没有相同的按钮,理论上,它没有任何意义)。稍后我将尝试在运行时对它们进行实例验证。窗体不应共享任何私有资源/控件
newform1()
将始终创建新实例。只有在使用
静态/共享
关键字声明控件时,才能共享它们。如果控件不是静态的,则说明您在初始化多个实例时遇到了问题。某些初始化逻辑没有正确执行。为了发现真正的问题,请展示/告诉“BackgroundWorker”做了什么,以及如何检查它是否正常工作。如果您在
后台工作人员之间共享了一些状态,那么在第一次启动之后,其他工作人员可能会启动并立即完成
string[] args = Environment.GetCommandLineArgs();
// 
// Here code to split the args, which starts at index 1 of the array.
//
Form1 f = New Form1();
// 
// Here code to change some form variables.
// ex. f.Var1 = arg1;
//
f.Show();
Me.Close();