さらに編集 する以下は本番コードではありません-スレッド内でプロセスを実行する方法を理解しようとしているいくつかのクラスで遊んでいます-またはそれが実行可能であっても。私は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();
}
}
なぜ2番目は最初と同じことをしないのですか?2番目のスクリプトではProcess.Start
、Threadstartデリゲートを使用して渡そうとしています...これはvoid
メソッドとしては問題ないと思いましたか?最初のスクリプトが唯一のオプションですか、それとも最初のスクリプトと同じ仕事を効果的に行うように、つまり指定されたスレッドでメモ帳のインスタンスを開始するように、2番目のスクリプトを少し変更できますか?
編集
私がこのコードで遊んでいる理由に関するいくつかの背景:最終的には、複数のExcelプロセスを同時に実行するアプリケーションを構築する必要があります。これらのプロセスは、VBAエラーが発生するとダイアログボックスが表示されるため、面倒な場合があります。したがって、各プロセスがスレッドで実行されている場合、特定のスレッドが長時間実行されている場合は、スレッドを強制終了できると思いました。私はスレッド/プロセスの初心者なので、基本的に現時点で可能性を試してみます。