在应用程序外运行并跟踪它是否已完成

时间:2013-04-19 06:11:27

标签: c#

我有一个允许用户设置备份解决方案的表单。我希望选择允许在单击按钮时“立即强制备份”。我的问题是,当前控制该功能的应用程序是一个控制台应用程序,它不显示控制台窗口。有没有办法让我启动应用程序并跟踪它的状态,比如给出一个工作屏幕,当它完成时使用messagebox来传递已完成的状态?

2 个答案:

答案 0 :(得分:3)

您可以使用Process.WaitForExit()执行某些操作。

这是关于标准错误的this msdn页。

// Start the child process.
Process p = new Process();
// Redirect the error stream of the child process.
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.FileName = "BackupProgram.exe";
p.Start();
//you could read the standard error from the backup program
//incase something went wrong.. 
string error = p.StandardError.ReadToEnd();
//warning the thread will BLOCK on this method. 
p.WaitForExit();

注意:

如果您有一个Windows窗体应用程序,那么您需要正确处理阻止。如果您在主线程上调用WaitForExit(),您的应用程序将挂起。

我认为你不能直接显示状态。除非您编写备份程序以与主程序通信。

因此,您可以使用后台工作程序或某些异步编程来实现运行并等待,然后您可以显示不确定的进度状态。 (progressBar1.Style = ProgressBarStyle.Marquee

答案 1 :(得分:0)

如果适用于您,只需将您的消息框警告到您的ConsoleApplication中即可。这意味着,您的控制台应用程序在后台运行,而无需向用户显示控制台。当应用程序到达结尾时,它会调用MessageBox.Show("I'm done.")并向用户显示该消息。