C# WPF 单例运行实现(实现1)
摘要
本文讲述C# WPF应用程序的单例运行的必要性和程序实现(实现1)。使用一个静态的互斥体对象,实现单实例运行机制,用于防止多个进程同时执行某段代码。能够有效防止老旧慢、小内存的工控机重复启动同一应用程序引起的程序崩溃。
一、前言
应用程序的单例运行通俗的讲就是同样应用程序在同一主机上的某一时刻只能运行一个,即同样应用程序在同一主机上的某一时刻只能有一个实例在运行。
在上位机的应用中经常会出现这样的情况,由于计算机比较旧(性能差)或内存比较小,单击启动一个WPF应用程序后,屏幕无反应。这时候大多数用户会认为没有点击到或者程序没启动,最简单的操作就是再单击一次,这时候其实已经启动了第二个同样WPF应用程序。
如果WPF应用程序涉及到了设备操作、通信或一些独占性资源操作的时候,程序必然会出错。例如我们在WPF应用程序涉及到了串口操作,而串口它是一个独占的资源,两次打开同一个串口必然会引起程序的出错,如果例外程序没有处理这种错误甚至会引起程序崩溃。
这样的情况带有普遍性。因为默认情况下,C#程序(包括WPF程序)会被编译成IL 代码(中间语言)以程序集的形式存放于磁盘上,当我们点击启动这个应用程序的时候,这个IL 代码会在CLR(公共语言运行时)的控制下进行加载,并使用JIT 动态编译编译成当前目标机机器码,然后再运行。这个过程(在CLR 管理下编译,加载,运行)相对是比较费时间的,加上计算机比较旧或内存比较小,所以就造成了这种情况普遍性存在。
二、程序实现程序及核心原理
1.程序实现程序及核心原理
使用WPF应用程序模板,.NET 10.0 目标框架建一工程。对App.xaml和App.xaml.cs做如下的修改。
App.xaml:
<Application x:Class="WpfApp_t1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp_t1"
Startup="Application_Startup"
Exit="Application_Exit">
<Application.Resources>
</Application.Resources>
</Application>
<!--
<Application x:Class="WpfApp_t1.App" 定义WPF应用程序的入口类,指定代码隐藏文件为WpfApp_t1命名空间下的App类
xmlns="http://schemas.microsoft.com/winfx/


5万+

被折叠的 条评论
为什么被折叠?



