我们可以使用另一个线程来执行外部可执行文件

时间:2010-11-23 01:16:44

标签: c# .net

我想知道是否可以使用另一个线程启动另一个可执行文件。启动另一个流程是资源密集型的

4 个答案:

答案 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);
        }

这是你的意思吗?