程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C#軟件啟動設計

C#軟件啟動設計

編輯:.NET實例教程

本文目的:根據近期開發的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);
}
}

/*

以上代碼就可以實現全部的軟件啟動功能,如果要填加登陸窗口,可以放在初始化窗口之後,也可以放在主窗口類來實現裡。

*/
}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved