LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#開發(fā)單實例應用程序并響應后續(xù)進程啟動參數(shù)

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

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

實現(xiàn)單實例可以有多種方法:

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

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

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

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

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

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

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

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

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

  • 方法OnCreateMainForm:創(chuàng)建主窗體的重寫方法,必須指定主窗體。

創(chuàng)建一個單實例應用程序并響應后續(xù)進程參數(shù)的大概過程:

  • 創(chuàng)建一個項目名稱為“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);


            //處理當前進程的啟動參數(shù)


            return true;

        }


        /// <summary>

        /// 后續(xù)進程啟動后的重寫方法

        /// </summary>

        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)

        {

            base.OnStartupNextInstance(eventArgs);


            //處理后續(xù)進程的啟動參數(shù)

        }


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

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲国产精品成 | 日本男女无遮羞羞视频 | 亚洲第一簧片在线 | 伊人久久大香线蕉AV网址 | 日本区一视频区二视频 | 亚洲国产午夜福利在线视频 |