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

时间:2015-02-06 16:02:29

标签: arrays vb.net multithreading process multiple-instances

我有两个.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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

“在单独的线程中运行进程”作为一个概念没有任何意义。进程包含线程;而不是相反。一个进程也拥有它自己的“内存空间”(虽然线程没有!),所以在这方面也没有区别。

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

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

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