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

时间:2017-07-02 22:18:53

标签: .net forms winforms instance backgroundworker

我正在创建一个项目,我实例化多次相同的表单,其中包含一些计时器,很多背景工人,当然还有一些私人阵列等。

问题是......它不起作用。

我的意思是,我可以看到所有表单,但BW仅适用于第一个实例,而不适用于其他实例,即使BW.isBusy()返回`false。 如果没有返回任何错误,他们就不会做他们应该做的事情。

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

如果是,有办法绕过这个问题吗? 如果不是,这个问题可能是什么原因?

抱歉,我无法向您展示该软件的来源甚至是屏幕截图(这是针对客户的) 但如果您需要更多细节,我会分享它们。

例如我正在使用这样的表格:

For (i = 0; i < 5; i++) {
     Form1 f = New Form1();
     f.Show();
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我的问题找到了“解决方法” 我没有实例化 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);
}

然后在 Form_Load()

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();

这不是最好的解决方案,但问题消失了,在我的情况下,可以使用多个进程而不是多个表单。