C#軟件啟動設計
2024-07-21 02:18:50
供稿:網友
本文目的:根據近期開發的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);
}
}
/*
以上代碼就可以實現全部的軟件啟動功能,如果要填加登陸窗口,可以放在初始化窗口之后,也可以放在主窗口類來實現里。
*/
}
}
網站運營seo文章大全提供全面的站長運營經驗及seo技術!