0

我试图阻止多次打开帮助文件。这是我正在使用的方法:

    public void openHelp()
    {
        int count = 0;
        string helpPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\MyApp\Help\eHelp.chm";

        System.Diagnostics.Process[] helpProcs = System.Diagnostics.Process.GetProcesses();
        foreach (System.Diagnostics.Process proc in helpProcs)
        {
            if (proc.MainWindowTitle == "Sample App Help")
            {
                count++;
            }
        }

        if (count == 0)
        {
            System.Diagnostics.Process.Start(helpPath);
        }
        else
        {
        }
    }

这个想法是,如果您发现该进程具有相同的 MainWindowTitle,则不要启动一个新进程。但是,这并不可靠。在某些情况下,它仍然会启动该过程,即使一个已经在运行。是不是逻辑有问题?

谢谢你。

PS 当然 MainWindowTitle 是“示例应用程序帮助”,至少这是我在调试时看到的。

更新:仅当用户最小化帮助文件时才会出现问题。所以我怀疑系统中发生了一些事情,我需要检查一些东西。有什么建议么?

4

1 回答 1

4

Process.MainWindowTitle中的备注部分包含以下注释:

主窗口是当前具有焦点的窗口;请注意,这可能不是该过程的主要窗口。您必须使用 Refresh 方法刷新 Process 对象以获取当前主窗口句柄(如果它已更改)。

这可能是您的问题的原因吗?

保留新启动的帮助查看器的进程 ID 怎么样,在启动另一个帮助查看器之前,只需检查旧的帮助查看器是否还活着。

int id = ...

try
{
    var proc = Process.GetProcessById(id);
}
catch
{
    // no process running with that id
}
于 2012-12-07T10:36:38.310 回答