我試圖阻止我的程序在任何給定的時間運行多個實例。我已經閱讀過有關使用互斥鎖和窗口事件的消息,但是這兩個線程都有幾年了,我很好奇,如果使用.net4,有更簡單,更優雅的方法來處理這個問題?我以爲我已經閱讀過有關允許您拒絕該屬性的多個實例的表單設置?是否有人能夠說明防止多個程序實例最安全和/或最簡單的方法?防止多個程序實例最安全的方法是什麼?
4
A
回答
4
最安全的方法是使用.NET中的內置支持WindowsFormsApplicationBase.IsSingleInstance屬性。很難猜測是否合適,您沒有花費很多精力描述您的確切需求。不,過去5年沒有任何變化。 - Hans Passant 1月7日0:38
這是最好的答案,但漢斯沒有提交它作爲答案。
3
在VB中,您可以在Winforms項目的項目級別(屬性>常規)中進行設置。
在C#中,你可以使用類似於此代碼..當然需要轉換..
Dim tGrantedMutexOwnership As Boolean = False
Dim tSingleInstanceMutex As Mutex = New Mutex(True, "MUTEX NAME HERE", tGrantedMutexOwnership)
If Not tGrantedMutexOwnership Then
'
' Application is already running, so shut down this instance
'
Else
'
' No other instances are running
'
End If
哎呀,我忘了提,你將需要把你的GC.KeepAlive(tSingleInstanceMutex)
後Application.Run()調用
1
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
namespace YourNameSpaceGoesHere
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
if (Process.GetProcessesByName("YourFriendlyProcessNameGoesHere").Length > 1)
{
MessageBox.Show(Application.ProductName + " already running!");
Application.ExitThread();
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new YourStartUpObjectFormNameGoesHere());
}
}
}
}
+0
好又幹淨的答案!投票 – Sylca 2013-02-27 12:59:34
相關問題
- 1. 防止多個服務實例 - 最佳方法?
- 2. 實現線程安全單例模式的最安全/正確的方法是什麼?
- 3. 多個實例,什麼是防止碰撞
- 4. 什麼是安全更新hibernate實體的最佳方法?
- 5. 防止node.js腳本終止的最有效方法是什麼?
- 6. OwlCarousel2初始化多個實例的最佳方式是什麼
- 7. 這是一個安全的方法來防止SQL注入?
- 8. 「這個方法不是線程安全的」是什麼意思?
- 9. 迭代HashSet的最快/最安全的方法是什麼?
- 10. 防止我的應用程序的多個實例
- 11. 防止.NET中給定應用程序的多個實例?
- 12. 防止啓動Java應用程序的多個實例
- 13. 如何防止Windows 10 XAML應用程序的多個實例?
- 14. 防止GTK應用程序的多個實例
- 15. 防止打開VB應用程序的多個實例
- 16. 防止Android應用程序開放的多個實例
- 17. 防止應用程序的多個實例
- 18. 什麼是比較兩個FieldInfo實例最可靠的方法?
- 19. 什麼是實現Web服務/ API的最安全的方式?
- 20. 交換兩個類實例的最安全方法
- 21. 創建「始終登錄」IOS應用程序的最安全方法是什麼?
- 22. 提高應用程序安全性的最佳方法是什麼?
- 23. 防止DDOS攻擊的最佳方法是什麼?
- 24. 防止令牌共享的最佳方法是什麼?
- 25. 防止SQL注入mysql的最佳方法是什麼
- 26. 實例變量的實例方法和線程安全
- 27. 創建運行EC2實例的調度程序的最佳方法是什麼?
- 28. 實施<a>的最佳/安全方式是什麼?
- 29. 實現App Transport安全性的最佳方式是什麼?
- 30. 跨平臺的方式,以防止打開應用程序的多個實例
最安全的方法是使用.NET中的內置支持WindowsFormsApplicationBase.IsSingleInstance屬性。很難猜測是否合適,您沒有花費很多精力描述您的確切需求。不,過去5年沒有任何變化。 – 2012-01-07 00:38:35
創建一個指定事件。承擔該怎麼辦呢[這裏]看看[1] [1]:http://stackoverflow.com/questions/447546/creating-win32-events-from-c-sharp – Odys 2012-01-07 00:42:49
如果漢斯你會做出評論一個實際的答案,我會獎勵你選擇的答案。 – 2012-01-22 20:09:10