进一步编辑 以下不是生产代码——我只是在玩几个类,试图弄清楚我如何在线程中运行进程——或者即使这是可行的。我已经阅读了 MSDN 上的各种定义,但我是线程和进程的新手,因此对文章的任何进一步明确参考将不胜感激
这可以...
class Program {
static void Main(string[] args) {
Notepad np = new Notepad();
Thread th = new Thread(new ThreadStart(np.startNPprocess));
th.Start();
Console.WriteLine("press [enter] to exit");
Console.ReadLine();
}
}
public class Notepad {
public void startNPprocess() {
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = @"notepad.exe";
pr.StartInfo = prs;
pr.Start();
}
}
这不是...
class Program {
static void Main(string[] args) {
Process pr = new Process();
ProcessStartInfo prs = new ProcessStartInfo();
prs.FileName = @"notepad.exe";
pr.StartInfo = prs;
ThreadStart ths = new ThreadStart(pr.Start);
Thread th = new Thread(ths);
th.Start();
Console.WriteLine("press [enter] to exit");
Console.ReadLine();
}
}
为什么第二个和第一个不一样?在第二个脚本中,我尝试Process.Start
使用 Threadstart 委托传递...我认为这可以作为它的一种void
方法吗?第一个脚本是唯一的选择,还是我可以稍微更改第二个脚本,以便它有效地完成与第一个脚本相同的工作,即在指定线程中启动记事本实例?
编辑
关于我为什么要使用此代码的一些背景知识:最终我需要构建一个将同时运行多个 Excel 进程的应用程序。当 VBA 出错时,这些过程可能会很麻烦,因为它会导致一个对话框。所以我想如果每个进程都在一个线程中运行,那么如果一个特定的线程已经运行了太长时间,那么我可以杀死该线程。我是线程/进程的新手,所以目前基本上是在玩各种可能性。