小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

[轉(zhuǎn)]C#單進(jìn)程解決方案

 kittywei 2012-02-17

一、使用用互斥量(System.Threading.Mutex)

  同步基元,它只向一個(gè)線程授予對(duì)共享資源的獨(dú)占訪問(wèn)權(quán)。在程序啟動(dòng)時(shí)候,請(qǐng)求一個(gè)互斥體,如果能獲取對(duì)指定互斥的訪問(wèn)權(quán),就職運(yùn)行一個(gè)實(shí)例。

  

  代碼

  bool createNew;

  using (System.Threading.Mutex mutex =new System.Threading.Mutex(true, Application.ProductName, out createNew))

  {

  if (createNew)

  {

  Application.Run(new Form1());

  }

  else

  {

  MessageBox.Show("應(yīng)用程序已經(jīng)在運(yùn)行中...")

  System.Threading.Thread.Sleep(1000);

  System.Environment.Exit(1);

  }

  }

  二、使用進(jìn)程名

  

  代碼

  Process[] processes = System.Diagnostics.Process.GetProcessesByName(Appl ication.CompanyName);

  if (processes.Length >1)

  {

  MessageBox.Show("應(yīng)用程序已經(jīng)在運(yùn)行中。。");

  Thread.Sleep(1000);

  System.Environment.Exit(1);

  }

  else

  {

  Application.Run(new Form1());

  }

  三、調(diào)用Win32 API,并激活并程序的窗口,顯示在最前端

  

  代碼

  /// 該函數(shù)設(shè)置由不同線程產(chǎn)生的窗口的顯示狀態(tài)

  ///</summary>

  ///<param >窗口句柄</param>

  ///<param >指定窗口如何顯示。查看允許值列表,請(qǐng)查閱ShowWlndow函數(shù)的說(shuō)明部分</param>

  ///<returns>如果函數(shù)原來(lái)可見(jiàn),返回值為非零;如果函數(shù)原來(lái)被隱藏,返回值為零</returns>

  [DllImport("User32.dll")]

  privatestaticexternbool ShowWindowAsync(IntPtr hWnd, int cmdShow);

  ///<summary>

  /// 該函數(shù)將創(chuàng)建指定窗口的線程設(shè)置到前臺(tái),并且激活該窗口。鍵盤(pán)輸入轉(zhuǎn)向該窗口,并為用戶(hù)改各種可視的記號(hào)。

  /// 系統(tǒng)給創(chuàng)建前臺(tái)窗口的線程分配的權(quán)限稍高于其他線程。

  ///</summary>

  ///<param >將被激活并被調(diào)入前臺(tái)的窗口句柄</param>

  ///<returns>如果窗口設(shè)入了前臺(tái),返回值為非零;如果窗口未被設(shè)入前臺(tái),返回值為零</returns>

  [DllImport("User32.dll")]

  privatestaticexternbool SetForegroundWindow(IntPtr hWnd);

  

  代碼

  privateconstint SW_SHOWNOMAL =1;

  privatestaticvoid HandleRunningInstance(Process instance)

  {

  ShowWindowAsync(instance.MainWindowHandle, SW_SHOWNOMAL);//顯示

  SetForegroundWindow(instance.MainWindowHandle);//當(dāng)?shù)阶钋岸?

  }

  privatestatic Process RuningInstance()

  {

  Process currentProcess = Process.GetCurrentProcess();

  Process[] Processes = Process.GetProcessesByName(currentProcess.ProcessN ame);

  foreach (Process process in Processes)

  {

  if (process.Id != currentProcess.Id)

  {

  if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == currentProcess.MainModule.FileName)

  {

  return process;

  }

  }

  }

  returnnull;

  }

  

  代碼

  Process process = RuningInstance();

  if (process ==null)

  {

  Application.Run(new Form1());

  }

  else

  {

  MessageBox.Show("應(yīng)用程序已經(jīng)在運(yùn)行中。。。");

  HandleRunningInstance(process);

  //System.Threading.Thread.Sleep(1000);

  //System.Environment.Exit(1);

  }

  這里整理了三種方案,希望朋友們提出更多的解決方案

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多