我想知道是否可以使用另一个线程启动另一个可执行文件。启动另一个流程是资源密集型的
答案 0 :(得分:4)
如果您问如何在后台启动该过程(以便您的UI不会冻结),您可以写
ThreadPool.QueueUserWorkItem(delegate { Process.Start("notepad.exe"); });
如果您要求在流程空间内执行流程,那对任意程序来说完全不可能,对托管程序来说这是一个非常糟糕的想法。
答案 1 :(得分:3)
如果从另一个线程启动另一个可执行文件,您将启动一个新进程。我认为你在某种程度上混淆了线程,进程和可执行文件之间的关系。
答案 2 :(得分:1)
本质上,可执行文件必须在其自己的进程中运行。但是,您可以从可执行文件中的另一个线程启动一个方法,因为它本身只是一个程序集。
线程共享创建它的进程的地址空间;流程有自己的地址。
为此,您需要将引用的exe设为friend assembly
。请参阅here。
或使用remoting。
答案 3 :(得分:0)
http://msdn.microsoft.com/en-us/library/e8zac0ca(v=VS.90).aspx
直接退出MSDN文档
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = false;
// You can start any process, HelloWorld is a do-nothing example.
myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
// This code assumes the process you are starting will terminate itself.
// Given that is is started without a window so you cannot terminate it
// on the desktop, it must terminate itself or you can do it programmatically
// from this application using the Kill method.
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
这是你的意思吗?