【问题标题】:C# loading files from argumentsC# 从参数加载文件
【发布时间】:2014-05-01 04:47:29
【问题描述】:

在我的应用程序中,我在我的应用程序(它是一个选项卡式记事本应用程序)中注册了一个文件类型 (.asm),当双击这些文件时,它们会通过我的应用程序通过加载时传递的参数打开:

    static void Main(string[] args)
    {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Main(args));
    }

现在的问题是,虽然这确实有效,但如果我的应用程序的一个实例已经在运行,那么无论何时打开一个文件,都会创建它的一个新实例,而不是在我没有在当前实例中打开一个新选项卡不想。所以我想检查程序是否已经在运行,如果是,那么我会在主窗体中调用一个单独的函数来加载该文档。但问题是,我不知道你是怎么从 Program.cs 调用 Main.cs 中的函数的,我们该怎么做呢?

【问题讨论】:

    标签: c# arguments


    【解决方案1】:

    这比从Program.cs 调用Main.cs 中的函数要复杂得多,因为在您双击注册文件时,操作系统会为您启动第二个进程。您需要一些方法来确定是否有另一个现有进程已经在运行,然后与该现有进程通信(如果有的话)。

    幸运的是,.NET Framework 中有一个类已经为您完成了所有艰苦的工作:

    Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase

    有关完整示例,请参阅此博客: http://windowsclient.net/blogs/suryahg/archive/2008/08/20/use-of-microsoft-visualbasic-applicationservices-part-2.aspx

    【讨论】:

    • 我已经计划通过检查进程名称来检查实例是否正在运行,如果是,我就不会启动程序的新实例,但这可能是个坏主意。无论如何,谢谢你的链接。它解决了我的问题:)
    【解决方案2】:

    这个问题中的技术可能会有所帮助:

    C# : how to - single instance application that accepts new parameters?

    【讨论】:

    • 感谢您的链接,连同上面发布的链接一起帮助我解决了我的问题。现在应用程序是一个实例,可以在同一个实例中加载多个文档;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2014-04-15
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多