【发布时间】:2019-11-26 15:32:38
【问题描述】:
进一步编辑 以下不是生产代码——我只是在玩几个类,试图弄清楚我如何在线程中运行进程——或者即使这是可行的。我已经阅读了 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();
}
}
为什么第二个和第一个不一样?在第二个脚本中,我尝试使用 Threadstart 委托传递Process.Start ...我认为这可以作为void 方法吗?
第一个脚本是唯一的选择还是我可以稍微更改第二个脚本,以便它有效地完成与第一个脚本相同的工作,即在指定线程中启动记事本实例?
编辑
关于为什么的一些背景知识我在玩这个代码:最终我需要构建一个应用程序,它将同时运行多个 Excel 进程。当 VBA 出错时,这些过程可能会很麻烦,因为它会导致一个对话框。所以我想如果每个进程都在一个线程中运行,那么如果一个特定的线程已经运行了太长时间,那么我可以杀死该线程。我是线程/进程的新手,所以目前基本上是在玩各种可能性。
【问题讨论】:
-
从另一个线程启动进程有什么好处?为什么不简单地从当前线程启动进程?结果将是相同的,因为启动进程不会等待其完成。
-
Process.Start 不是 void 方法,它返回 bool。
-
关于您的编辑,您不应该使用 COM 自动化 Excel(或者更好的是,使用 open xml SDK 完全不使用 excel),而不是开始一个新流程?
-
或者只是不自动化 Excel ...support.microsoft.com/kb/257757(是的,它用于服务器端的东西,但它似乎适用于这里)
-
这是对您的编辑的评论,您可以禁用 excel 中的大多数对话框,因此它们不会弹出,除非您希望它们弹出
标签: c#