运行 使用 .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.
您可能需要多个线程的唯一原因是,在您发布的特定代码中,您正在等待应用程序退出,然后代码才能继续。这意味着您在应用程序 运行 时阻塞了线程,仅出于这个原因,您可能需要多个线程。 (也就是说,您最好重构代码,使其 运行 在单个线程上运行。)
就 运行 多个应用程序实例的安全性而言:这完全取决于应用程序。十几个记事本实例 运行 并排没有问题,但并非所有应用程序都是如此。
我有两个 .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.
您可能需要多个线程的唯一原因是,在您发布的特定代码中,您正在等待应用程序退出,然后代码才能继续。这意味着您在应用程序 运行 时阻塞了线程,仅出于这个原因,您可能需要多个线程。 (也就是说,您最好重构代码,使其 运行 在单个线程上运行。)
就 运行 多个应用程序实例的安全性而言:这完全取决于应用程序。十几个记事本实例 运行 并排没有问题,但并非所有应用程序都是如此。