我有两个.NET应用程序。一个是独立的控制台应用程序,它启动第二个应用程序的多个实例,传递每个不同的参数数组。我使用Process.Start启动第二个应用程序。
我需要确保每个应用程序实例在内存中都有自己的空间,我正在考虑创建一个新线程来运行每个应用程序。我是多线程的新手,并想知道这是一个好习惯吗?有更好的方法吗?同一个应用程序的多个实例可以并排运行而不会出现任何问题吗?我很感激任何帮助。谢谢!
以下是启动应用的部分代码: 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
我想在上面的代码中添加多线程,以使应用程序能够生成第二个应用程序的多个实例。我还需要一些帮助
答案 0 :(得分:1)
嗯,notepad.exe可以运行多个独立的实例,你的应用也可以运行。无需任何修改。默认情况下,实例彼此隔离并且不共享任何内容。
答案 1 :(得分:1)
“在单独的线程中运行进程”作为一个概念没有任何意义。进程包含线程;而不是相反。一个进程也拥有它自己的“内存空间”(虽然线程没有!),所以在这方面也没有区别。
如果使用Process.Start
启动进程,它将完全独立于您的代码运行(完全在您有权访问的任何线程之外)并具有自己的内存空间。
您可能需要多个线程的唯一原因是,在您发布的特定代码中,您正在等待应用程序退出,然后代码才能继续。这意味着您在应用程序运行时阻塞了线程,因此仅此原因您可能需要多个线程。 (也就是说,你可能最好重构代码,以便它可以在一个线程上运行。)
就运行多个应用程序实例的安全性而言:这完全取决于应用程序。十几个记事本实例将并排运行,没有任何问题,但并非所有应用程序都是如此。