C#實(shí)現(xiàn)只運(yùn)行單個(gè)實(shí)例應(yīng)用程序的方法(使用VB.Net的IsSingleInstance)
從 <<Windows Forms 2.0 Programming, 2nd Edition>> - Single-Instance Applications 這一章中, 學(xué)到了調(diào)用 VB.Net 中的 IsSingleInstance, 為 C# WinForm 添加只運(yùn)行應(yīng)用程序的單個(gè)實(shí)例 ( Single Instance Application). 是個(gè)好方法!
該方法顯然從易用性上便捷與 Mutex 和 Process 這兩種只運(yùn)行單個(gè)應(yīng)用程序?qū)嵗姆椒?
Single Instance 概念:
從.NET 2.0起,提供了WindowsFormsApplicationBase類來簡(jiǎn)化Windows應(yīng)用程序編程,如果您是開發(fā)人員會(huì)感到感到奇怪,WindowsFormsApplicationBase類不在System.Windows.Forms 命名空間中而是屬于Microsoft.VisualBasic.ApplicationServices 命名空間,也許這是作為VB.NET開發(fā)人員的優(yōu)先好處吧。該類對(duì)應(yīng)的程序集為Microsoft.VisualBasic.dll,不過該程序集包含在.NET框架中一起發(fā)布,如果要引用該程序集,在部署上不存在額外操作。
WindowsFormsApplicationBase類實(shí)現(xiàn)了類似于Application類的一些功能,不過該類還包含一些簡(jiǎn)化Windows Forms應(yīng)用程序開發(fā)的接口,下面來簡(jiǎn)單了解一下。WindowsFormsApplicationBase類實(shí)現(xiàn)了對(duì)單實(shí)例應(yīng)用程序的支持,通過設(shè)置IsSingleInstance 屬性為True以及重寫OnStartupNextInstance方法可以簡(jiǎn)潔的實(shí)現(xiàn)。
實(shí)現(xiàn)
在 Program.cs - Main 方法中
1. 項(xiàng)目中引用VB.Net 的DLL – Microsoft.VisualBasic.DLL,
Program.cs:
2. 在Program.cs中增加一個(gè)類
Program.cs:
public sealed class SingleInstanceApplication : WindowsFormsApplicationBase
{
public SingleInstanceApplication()
{
base.IsSingleInstance = true;
base.ShutdownStyle = ShutdownMode.AfterMainFormCloses;
}
protected override void OnCreateMainForm()
{
base.MainForm = new MainForm();
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs e)
{
base.OnStartupNextInstance(e);
base.MainForm.Activate();
}
}
3. 修改原 Application.Run(new MainForm()); 方法為:
//添加運(yùn)行單進(jìn)程程序
SingleInstanceApplication application = new SingleInstanceApplication();
application.Run(args);
SingleInstanceApplication類繼承自WindowsFormsApplicationBase,在構(gòu)造函數(shù)中設(shè)置為單實(shí)例模式,同時(shí)設(shè)置在主窗體關(guān)閉后退出應(yīng)用程序。在繼承類中,OnCreateMainForm方法被重寫用來創(chuàng)建主窗體,如果要保證應(yīng)用程序單一實(shí)例運(yùn)行,還需要重寫OnStartupNextInstance方法,在該應(yīng)用程序的下一個(gè)應(yīng)用程序?qū)嵗龁?dòng)時(shí),OnStartupNextInstance方法會(huì)得到執(zhí)行,在上面的實(shí)現(xiàn)代碼中,調(diào)用基類方法同時(shí)激活主窗口。
- vb.net與c#相互轉(zhuǎn)換工具 網(wǎng)站地址列表
- 常用工具之 vb轉(zhuǎn)化C# 數(shù)據(jù)連接串 正則表達(dá)式查詢 源碼世界 腳本字典
- ACCESS的參數(shù)化查詢,附VBSCRIPT(ASP)和C#(ASP.NET)函數(shù)
- asp.net 程序性能優(yōu)化的七個(gè)方面 (c#(或vb.net)程序改進(jìn))
- 在C#中調(diào)用VBScript、javascript等腳本的實(shí)現(xiàn)代碼
- javascript中字符串替換函數(shù)replace()方法與c# 、vb 替換有一點(diǎn)不同
- asp.net 驗(yàn)證碼的簡(jiǎn)單制作(vb.net+C#)
- C# VB 實(shí)現(xiàn)10進(jìn)制 16進(jìn)制之間互相轉(zhuǎn)換
- 獲取客戶端IP地址c#/vb.net各自實(shí)現(xiàn)代碼
- C#利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本
- 如何讓C#、VB.NET實(shí)現(xiàn)復(fù)雜的二進(jìn)制操作
- C#中的除法運(yùn)算符與VB.NET中的除法運(yùn)算符
- C#、vb.net及SQL判斷指定年份是否為閏年的方法
- C#調(diào)用VB進(jìn)行簡(jiǎn)繁轉(zhuǎn)換的方法
- C#中調(diào)用VB中Inputbox類的實(shí)現(xiàn)方法
相關(guān)文章
C#調(diào)用Matlab生成的dll方法的詳細(xì)說明
這篇文章詳細(xì)介紹了C#調(diào)用Matlab生成的dll方法,有需要的朋友可以參考一下2013-09-09跳一跳自動(dòng)跳躍C#代碼實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了跳一跳自動(dòng)跳躍C#代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C#下實(shí)現(xiàn)創(chuàng)建和刪除目錄的實(shí)例代碼
這篇文章主要介紹了C#下實(shí)現(xiàn)創(chuàng)建和刪除目錄的方法,功能非常實(shí)用,需要的朋友可以參考下2014-08-08C#實(shí)現(xiàn)滑動(dòng)開關(guān)效果
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)滑動(dòng)開關(guān)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C#零基礎(chǔ)開發(fā)中最重要的概念總結(jié)
這篇文章主要為大家詳細(xì)介紹了C#零基礎(chǔ)開發(fā)中最重要的一些概念,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,需要的可以參考一下2023-02-02