C#實現確保單程式類
通過監聽本地設定的TCP埠實現,無網路卡也沒問題。解決防火牆問題,不會彈出防火牆詢問。
1/*------------------------------------------
2* 模組名稱:確保單程式類
3* 設計作者:張鵬
4* 設計日期:2009-6-4
5* 備註:大風扇吹空香皂盒
6*------------------------------------------*/
7using System;
8using System.Collections.Generic;
9using System.Text;
10using System.Net.Sockets;
11using System.IO;
12using System.Threading;
13using System.Net;
14
15namespace aaaSoft
16{
17 ///
18 /// 單程式類
19 ///
20 class SingleProcess
21 {
22 private string GuidString;
23 private int TcpPort;
24 private TcpListener listener;
25
26 ///
27 /// 建構函式
28 ///
29 /// 唯一識別符號
30 /// 監聽TCP埠號
31 public SingleProcess(string GuidString, int TcpPort)
32 {
33 this.GuidString = GuidString;
34 this.TcpPort = TcpPort;
35 }
36
37 ///
38 /// 當第二程式執行時引發
39 ///
40 public event EventHandler SecondProcessStart;
41
42 ///
43 /// 開始確保單程式
44 ///
45 public void Start()
46 {
47 try
48 {
49 listener = new TcpListener(IPAddress.Parse("127.0.0.1"), TcpPort);
50 listener.Start();
51 Thread trdListen = new Thread(Run);
52 trdListen.Start();
53 }
54 catch
55 {
56 //說明已經有例項存在
57 TcpClient client = new TcpClient();
58 client.Connect("127.0.0.1", TcpPort);
59 NetworkStream ns = client.GetStream();
60 byte[] buffer = Encoding.Default.GetBytes(GuidString);
61 ns.Write(buffer, 0, buffer.Length);
62 ns.Close();
63 Environment.Exit(0);
64 }
65 }
66 ///
67 /// 結束確保單程式
68 ///
69 public void Stop()
70 {
71 listener.Stop();
72 }
73
74 private void Run()
75 {
76 try
77 {
78 while (true)
79 {
80 TcpClient client = listener.AcceptTcpClient();
81 NetworkStream ns = client.GetStream();
82 StreamReader sr = new StreamReader(ns);
83 string s = sr.ReadToEnd();
84 ns.Close();
85 if (s.Equals(GuidString))
86 {
87 //觸發事件
88 SecondProcessStart.Invoke(null, null);
89 }
90 }
91 }
92 catch { }
93 }
94 }
95}
2* 模組名稱:確保單程式類
3* 設計作者:張鵬
4* 設計日期:2009-6-4
5* 備註:大風扇吹空香皂盒
6*------------------------------------------*/
7using System;
8using System.Collections.Generic;
9using System.Text;
10using System.Net.Sockets;
11using System.IO;
12using System.Threading;
13using System.Net;
14
15namespace aaaSoft
16{
17 ///
18 /// 單程式類
19 ///
20 class SingleProcess
21 {
22 private string GuidString;
23 private int TcpPort;
24 private TcpListener listener;
25
26 ///
27 /// 建構函式
28 ///
29 /// 唯一識別符號
30 /// 監聽TCP埠號
31 public SingleProcess(string GuidString, int TcpPort)
32 {
33 this.GuidString = GuidString;
34 this.TcpPort = TcpPort;
35 }
36
37 ///
38 /// 當第二程式執行時引發
39 ///
40 public event EventHandler SecondProcessStart;
41
42 ///
43 /// 開始確保單程式
44 ///
45 public void Start()
46 {
47 try
48 {
49 listener = new TcpListener(IPAddress.Parse("127.0.0.1"), TcpPort);
50 listener.Start();
51 Thread trdListen = new Thread(Run);
52 trdListen.Start();
53 }
54 catch
55 {
56 //說明已經有例項存在
57 TcpClient client = new TcpClient();
58 client.Connect("127.0.0.1", TcpPort);
59 NetworkStream ns = client.GetStream();
60 byte[] buffer = Encoding.Default.GetBytes(GuidString);
61 ns.Write(buffer, 0, buffer.Length);
62 ns.Close();
63 Environment.Exit(0);
64 }
65 }
66 ///
67 /// 結束確保單程式
68 ///
69 public void Stop()
70 {
71 listener.Stop();
72 }
73
74 private void Run()
75 {
76 try
77 {
78 while (true)
79 {
80 TcpClient client = listener.AcceptTcpClient();
81 NetworkStream ns = client.GetStream();
82 StreamReader sr = new StreamReader(ns);
83 string s = sr.ReadToEnd();
84 ns.Close();
85 if (s.Equals(GuidString))
86 {
87 //觸發事件
88 SecondProcessStart.Invoke(null, null);
89 }
90 }
91 }
92 catch { }
93 }
94 }
95}
==================================================================
下面是使用示例,僅需要修改Program.cs檔案(Demo專案Program.cs檔案如下):
==================================================================
1using System;
2using System.Collections.Generic;
3using System.Windows.Forms;
4
5namespace 單例項執行
6{
7 static class Program
8 {
9 const int TcpPort = 53256;
10 const string GuidString = "C0DA3908-7F39-45ad-8E5B-CC47064031EA";
11 public static aaaSoft.SingleProcess sp;
12
13 public static Form frmMain;
14 ///
15 /// 應用程式的主入口點。
16 ///
17 [STAThread]
18 static void Main()
19 {
20 Application.EnableVisualStyles();
21 Application.SetCompatibleTextRenderingDefault(false);
22 frmMain = new Form1();
23
24 sp = new aaaSoft.SingleProcess(GuidString, TcpPort);
25 sp.SecondProcessStart += new EventHandler(sp_SecondProcessStart);
26 sp.Start();
27 Application.Run(frmMain);
28 sp.Stop();
29 }
30
31 static void sp_SecondProcessStart(object sender, EventArgs e)
32 {
33 frmMain.WindowState = FormWindowState.Normal;
34 frmMain.Show();
35 frmMain.Activate();
36 }
37 }
38}
2using System.Collections.Generic;
3using System.Windows.Forms;
4
5namespace 單例項執行
6{
7 static class Program
8 {
9 const int TcpPort = 53256;
10 const string GuidString = "C0DA3908-7F39-45ad-8E5B-CC47064031EA";
11 public static aaaSoft.SingleProcess sp;
12
13 public static Form frmMain;
14 ///
15 /// 應用程式的主入口點。
16 ///
17 [STAThread]
18 static void Main()
19 {
20 Application.EnableVisualStyles();
21 Application.SetCompatibleTextRenderingDefault(false);
22 frmMain = new Form1();
23
24 sp = new aaaSoft.SingleProcess(GuidString, TcpPort);
25 sp.SecondProcessStart += new EventHandler(sp_SecondProcessStart);
26 sp.Start();
27 Application.Run(frmMain);
28 sp.Stop();
29 }
30
31 static void sp_SecondProcessStart(object sender, EventArgs e)
32 {
33 frmMain.WindowState = FormWindowState.Normal;
34 frmMain.Show();
35 frmMain.Activate();
36 }
37 }
38}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610735/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- puppet確保程式執行
- C#神器"BlockingCollection"類實現C#神仙操作C#BloCGC
- Laravel 單元測試實戰(3)- 編寫整合測試確保介面和資料庫程式碼正確Laravel資料庫
- 確保應用程式安全性
- C#實現單例項執行C#單例
- C# SQLiteHelper類似SqlHelper類實現存取Sqlite資料庫C#SQLite資料庫
- c#實體類C#
- 簡單實現類似Spring的Aop原理實現Spring
- 精確統計程式碼量(Java實現)Java
- Python的類及單例實現Python單例
- jQuery實現左側分類選單jQuery
- 確保物件的唯一性——單例模式 (五)物件單例模式
- 確保物件的唯一性——單例模式 (四)物件單例模式
- 確保物件的唯一性——單例模式 (三)物件單例模式
- 確保物件的唯一性——單例模式 (二)物件單例模式
- C++ 簡單實現陣列類泛型程式設計示例C++陣列泛型程式設計
- 簡單的C#日誌類C#
- c#實現最簡單的socket通訊C#
- c#實現簡單的俄羅斯方塊C#
- c#簡單實現提取網頁內容C#網頁
- 確保某個BeanDefinitionRegistryPostProcessor Bean被最後執行的幾種實現方式Bean
- 電商左側商品分類選單實現
- 選單的無限極分類實現
- Java 簡單實現撲克牌抽象類Java抽象
- 微信小程式選單實現微信小程式
- C# 單例模式的實現和效能對比C#單例模式
- C#反射實現簡單的外掛系統C#反射
- 設計模式-C#實現簡單工廠模式設計模式C#
- SAP UI5 確保控制元件 id 全域性唯一的實現方法UI控制元件
- Bert文字分類實踐(一):實現一個簡單的分類模型文字分類模型
- AbsInt — 確保程式碼安全的靜態效能分析工具
- 程式間通訊的另類實現
- 餓漢式單例與懶漢式單例的C#實現單例C#
- DS單連結串列--類實現(未完成)
- 簡單的string類的模擬實現
- 正確的equals實現
- C#實現的簡單的隨機抽號器C#隨機
- C# 如何實現簡單的Socket通訊(附示例)C#