4

相关问题 [stackoverflow]在这里

我正在尝试执行上述操作,但我想更进一步。我想使用文件类型的默认编辑器打开任意文件。从那时起,我想让我的用户像往常一样与文件交互,或者继续在我的应用程序中工作。扩展是用户完成编辑后发生的事情。有没有办法可以从外部应用程序捕获关闭(最好是保存)事件并将其用作执行其他操作的触发器?出于我的目的,跟踪外部应用程序的关闭就可以了。

我可以在特定情况下做到这一点。例如,我可以从我的应用程序中打开一个 Word 实例并跟踪我的应用程序感兴趣的事件。但是,我想将我的应用程序与 Word 分离。我想允许我的用户使用他们选择的任何文档编辑器,然后在幕后管理正在编辑的文件的存储。

4

4 回答 4

3

您可以通过类似于引用问题的方式执行此操作,但语法略有不同:

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = 
    new System.Diagnostics.ProcessStartInfo("C:\...\...\myfile.html");
process.Start();
process.WaitForExit(); // this line is the key difference

WaitForExit() 调用将阻塞,直到其他应用程序关闭。您将在单独的线程中使用此代码,以便用户可以同时继续使用您的应用程序。

于 2009-09-14T00:17:25.490 回答
2

使用FileSystemWatcher该类来监视文件的更改。

编辑:您还可以处理对象的Exited事件Process以找出程序何时退出。但是,请注意,这不会告诉您用户关闭了您的文件但没有退出该过程。(这在 Word 中尤其可能)。

于 2009-09-14T00:05:40.800 回答
0

要侦听文件更改,您可以使用FileSystemWatcher并侦听上次修改日期的更改。

您还可以监视进程并在进程关闭时检查然后文件。

于 2009-09-14T00:04:48.973 回答
0

我刚刚在网上找到了这个有用的提示。这似乎是您正在寻找的东西。这篇文章(链接断开)有一些更详细和有用的 C# 编程技巧。

string filename = "instruction.txt";
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(@filename);

System.Diagnostics.Process rfp = new System.Diagnostics.Process();
rfp = System.Diagnostics.Process.Start(psi);

rfp.WaitForExit(2000);

if (rfp.HasExited)
{
   System.IO.File.Delete(filename);
}

//execute other code after the program has closed
MessageBox.ShowDialog("The program is done.");
于 2009-09-14T00:24:19.127 回答