C#軟體啟動設計
來源:互聯網
上載者:User
設計 本文目的:根據近期開發的C#軟體,對於軟體的啟動設計談談我的心得。
如下代碼是我設計的啟動軟體的類,應用程式入口也是在這個普通類裡面。
using System;
using System.Threading;
using System.Windows.Forms;
namespace MainClass
{
public class MainApp
{
private static Mutex myMutex;
private static bool requestInitialOwnership = true;
private static bool mutexWasCreated;
/*
以上的部分是聲明進程的互斥
*/
[STAThread]
static void Main()
{
try
{
myMutex = new Mutex(requestInitialOwnership,"Test",out mutexWasCreated);
if(!(requestInitialOwnership && mutexWasCreated))
myMutex.WaitOne();
else
new MainApp();
/*
這裡就是進程互斥的實現。我看過一些人寫的啟功互斥,他們採用的方式是先看當前進程表裡有沒有要啟動的進程;有,看看這個進程是否和要啟動並執行進程來之相同的目錄。
實際上看來,這樣不能徹底解決問題,例如,如果我把程式改名,軟後換個目錄這樣就可以在此運行了,而且時間複雜度偏大。
而以上的代碼:
myMutex = new Mutex(requestInitialOwnership,"Test",out mutexWasCreated);
這裡是申請一個命名互斥,並且返回是否已經有同名的申請了。
if(!(requestInitialOwnership && mutexWasCreated))
myMutex.WaitOne();
如果互斥已經申請過了,阻塞要啟動並執行程式。
*/
}
}
catch(Exception ed)
{
MessageBox.Show(ed.ToString(),"Wrong Convention",MessageBoxButtons.OK,MessageBoxIcon.Error);
System.Environment.Exit(0);
}
}
public MainApp()
{
/*
以下是啟動類
*/
try
{
//這個視窗就是初始化視窗,也可以說是軟體封皮
MainClass.InitializeForm.InitializeForm initializeForm = new MainClass.InitializeForm.InitializeForm();
//在初始化視窗裡面添加檢驗程式,一般是用來初始化資料庫
string result;
if((result = initializeForm.StartTest()) != "")
throw new Exception(result);
else
initializeForm.Close();
//結束初始化視窗,最後進入主視窗
Application.Run(new MainForm.MainForm());
}
catch(Exception ed)
{
MessageBox.Show(ed.ToString(),"#error#",MessageBoxButtons.OK,MessageBoxIcon.Error);
Environment.Exit(1);
}
}
/*
以上代碼就可以實現全部的軟體啟動功能,如果要填加登陸視窗,可以放在初始化視窗之後,也可以放在主視窗類來實現裡。
*/
}
}