欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#開發單實例應用程序并響應后續進程啟動參數

freeflydom
2024年9月7日 21:57 本文熱度 789

C#默認的WinForm模板是不支持設置單實例的,也沒有隔壁大哥VB.NET那樣有個“生成單個實例應用程序”的勾選選項(VB某些時候要比C#更方便)。

實現單實例可以有多種方法:

  • 檢測同名進程:Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName),如果集合的Length > 1那就表明已有同名進程了,如果有需要還可以進一步檢查該進程的路徑;

  • 命名互斥鎖:Mutex,網上介紹的很多都是這種方法;

  • 鎖定文件:使用File.Create方法創建文件并在程序退出時釋放,如果創建失敗則表明已經有實例在運行;

  • VB.NET方法:WindowsFormsApplicationBase,個人認為該方法最完美,可以接收后續進程的啟動參數,還可以彈出前序進程的主窗體。

WindowsFormsApplicationBase是一個Microsoft.VisualBasic.ApplicationServices命名空間下的類,是微軟為VB.NET實現應用程序啟動控制的類,其內部是以命名管道通信來實現的。既然是同一個爹的東西,C#拿過來用毫無違和感。Microsoft.VisualBasic和Microsoft.CSharp一樣,都是.NET Framework中的一部分,不用擔心會缺少運行環境。

WindowsFormsApplicationBase類的一些常用屬性和方法:

  • 屬性IsSingleInstance:設置當前進程是否為單實例進程,在構造方法中設置,如果是后續進程且為值true,構造方法結束后會給前序進程發送啟動參數,然后就退出進程了,不會執行到下面的OnStartup;

  • 方法OnStartup:首次啟動后運行,返回false就會退出進程,后續進程永遠不會運行到該方法;

  • 方法OnStartupNextInstance:后續進程啟動后的重寫方法,前序進程會接收到后續進程的啟動參數,彈出主窗體等;

  • 方法OnCreateMainForm:創建主窗體的重寫方法,必須指定主窗體。

創建一個單實例應用程序并響應后續進程參數的大概過程:

  • 創建一個項目名稱為“SingleInstanceSample”的Windows窗體項目;

  • 添加引用“Microsoft.VisualBasic”;

  • 重命名“Form1”為“MainForm”;

  • 添加類“ApplicationBase.cs”,繼承自“WindowsFormsApplicationBase”;

  • 修改“Program.cs”,從“ApplicationBase”啟動。

各個類的代碼如下:

Program.cs 

using System;

using System.Windows.Forms;


namespace SingleInstanceSample

{

    internal static class Program

    {

        [STAThread]

        static void Main(string[] args)

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);


            var app = new ApplicationBase();

            app.Run(args);

        }

    }

}

ApplicationBase.cs

using Microsoft.VisualBasic.ApplicationServices;

using System.IO;


namespace SingleInstanceSample

{

    internal class ApplicationBase : WindowsFormsApplicationBase

    {

        public ApplicationBase() : base(AuthenticationMode.Windows)

        {

            //指示進程為單進程:IsSingleInstance

            base.IsSingleInstance = true;

            base.SaveMySettingsOnExit = true;

            base.ShutdownStyle = ShutdownMode.AfterMainFormCloses;

        }


        /// <summary>

        /// 首次啟動后的重寫方法,返回false就會退出進程,

        /// 比如可以顯示登錄窗體,登錄失敗返回false就不會運行到OnCreateMainForm

        /// </summary>

        protected override bool OnStartup(StartupEventArgs eventArgs)

        {

             base.OnStartup(eventArgs);


            //處理當前進程的啟動參數


            return true;

        }


        /// <summary>

        /// 后續進程啟動后的重寫方法

        /// </summary>

        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)

        {

            base.OnStartupNextInstance(eventArgs);


            //處理后續進程的啟動參數

        }


        /// <summary>

        /// 指定主窗體,

        /// 除非OnStartup返回false,否則必須指定主窗體

        /// </summary>

        protected override void OnCreateMainForm()

        {

            base.MainForm = new MainForm();

        }

    }

}

轉自https://www.cnblogs.com/yiluxiangdong/p/18288392 作者一路向東


該文章在 2024/9/9 9:58:56 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved