运行 使用 .NET 多线程的同一应用程序的多个实例

Running multiple instances of the same application using .NET multithreading

我有两个 .NET 应用程序。一个是独立的控制台应用程序,它启动第二个应用程序的多个实例,传递每个不同的参数数组。我使用 Process.Start.

启动第二个应用程序

我需要确保每个应用程序实例在内存中都有自己的 space,我正在考虑为每个应用程序创建一个新线程 运行。我对多线程还很陌生,想知道这是否是一个好习惯?有更好的方法吗?同一个应用程序的多个实例 运行 可以并排没有任何问题吗?我将不胜感激任何帮助。谢谢!

以下是启动应用程序的部分代码: arr 是一个包含多个字符串值的数组。下面的代码以等于 iCount 的增量获取这些值,将它们放入临时数组 - arrTemp 并将其传递给第二个应用程序:

i = 0

While (i <= arr.Count - 1)
    j = 0
    ReDim arrTemp(iCount-1)
    While j < iCount And j < arr.Count - 1
        arrTemp(j) = arr(i).ToString()
        j += 1
        i += 1
    End While

  'pass an array to the process as an argument
   startInfo.Arguments = String.Join(" ", arrTemp)
   Dim p As Process = Process.Start(startInfo)
   p.WaitForExit()

   'clear the array
    ClearArray(arrTemp)

    i = j + 1
End While

我想在上面的代码中添加多线程,以使该应用能够生成第二个应用的多个实例。我也需要一些帮助

好吧,notepad.exe 可以 运行 多个独立实例,您的应用也可以。无需任何修改。默认情况下,实例彼此隔离,不共享任何内容。

"Running processes in separate threads" 作为一个概念没有任何意义。进程包含线程;不是相反。进程也有自己的 "space in memory"(而线程没有!),因此在这方面也没有区别。

如果您使用 Process.Start 启动进程,它将 运行 完全独立于您的代码(完全在您有权访问的任何线程之外)并拥有自己的内存 space.

您可能需要多个线程的唯一原因是,在您发布的特定代码中,您正在等待应用程序退出,然后代码才能继续。这意味着您在应用程序 运行 时阻塞了线程,仅出于这个原因,您可能需要多个线程。 (也就是说,您最好重构代码,使其 运行 在单个线程上运行。)

就 运行 多个应用程序实例的安全性而言:这完全取决于应用程序。十几个记事本实例 运行 并排没有问题,但并非所有应用程序都是如此。