如何知道DLL中的对话框窗体是否已启动并打开

本文关键字:启动 是否 窗体 DLL 何知道 对话框 | 更新日期: 2023-09-27 18:29:51

在我们的可重用程序集中,我创建了一个静态类,这样我就可以在程序集的各个部分中调用它,并访问另一个项目并调用它的方法,等等。。。

public static class CommentViewerHelper
{
    static CommentViewerHelper()
    {
       CommentViewer = new CommentViewer();
    }
    /// <summary>
    /// Gives access to PCSCommentViewer public methods and properties.
    /// </summary>
    public static CommentViewer CommentViewer { get; private set; }
} 

此CommentViewer项目有一个表单,用户可以输入注释等。。。我的问题是,我如何才能知道用户是否真的打开了这个CommentViewer程序?我的意思是,是的,我可以随时调用它的方法,但有没有一种方法可以首先知道该程序是否打开?

如何知道DLL中的对话框窗体是否已启动并打开

要检查表单是否打开,可以使用IsHandleCreated属性。

另一方面,如果你首先编写了启动另一个表单的代码,那么你不应该知道这是否发生了吗?

我相信您想要实现的是,即使多次调用对话框,也不会多次(重新)加载对话框的内容。您可以使用"惰性加载"来完成此操作。

创建一个字符串生成器引用并将其设置为null。在初始化中,如果引用为null,则创建字符串生成器对象并将内容加载到其中。如果它不为null,那么您知道内容已经被检索到,您可以简单地使用字符串生成器。

如果您自己创建表单,那么查询AppDomain等应该不会有任何问题。

如果你没有直接访问.NET应用程序信息的方法,你可以尝试这样的方法:

using System.Diagnostics;
private bool ApplicationExists(string appName)
{
    foreach (Process currentProcess in Process.GetProcesses("."))
    {
        if (currentProcess.MainWindowTitle.Length == appName)
        {
            return true;
        }
    }
    return false;
}