狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

C#開發(fā)單實(shí)例應(yīng)用程序并響應(yīng)后續(xù)進(jìn)程啟動參數(shù)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 創(chuàng)建一個項(xiàng)目名稱為“SingleInstanceSample”的Windows窗體項(xiàng)目;

  • 添加引用“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)

        {

            //指示進(jìn)程為單進(jìn)程:IsSingleInstance

            base.IsSingleInstance = true;

            base.SaveMySettingsOnExit = true;

            base.ShutdownStyle = ShutdownMode.AfterMainFormCloses;

        }


        /// <summary>

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

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

        /// </summary>

        protected override bool OnStartup(StartupEventArgs eventArgs)

        {

             base.OnStartup(eventArgs);


            //處理當(dāng)前進(jìn)程的啟動參數(shù)


            return true;

        }


        /// <summary>

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

        /// </summary>

        protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)

        {

            base.OnStartupNextInstance(eventArgs);


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

        }


        /// <summary>

        /// 指定主窗體,

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

        /// </summary>

        protected override void OnCreateMainForm()

        {

            base.MainForm = new MainForm();

        }

    }

}

轉(zhuǎn)自https://www.cnblogs.com/yiluxiangdong/p/18288392 作者一路向東


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