我有一个自定义的ApplicationContext,我试图在满足特定条件时终止它.我使用Mutex来确保单个实例.
我试过了base.OnMainFormClosed(null, null);.Application.Exit()和ExitThread.一切都停止处理,但进程本身仍在运行.
完整的Main()方法:
static void Main()
{
bool firstInstance;
using (Mutex mutex = new Mutex(true,
@"Global\MyApplication",
out firstInstance))
{
if (!firstInstance)
{
MessageBox.Show("Another instance is already running.");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new CustomContext());
}
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的技术?
Application.Run(new CustomContext());
Run Code Online (Sandbox Code Playgroud)
没关系,但是你不存储对你创建的CustomContext对象的引用.因此无法调用其ExitThread方法.像这样调整它:
class Program {
private static CustomContext appContext;
[STAThread]
public static void Main() {
// Init code
//...
appContext = new CustomContext();
Application.Run(appContext);
}
public static void Quit() {
appContext.ExitThread();
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以简单地调用Program.Quit()来停止消息循环.
在此主题中检查我的答案,以获得实现单实例应用程序的更好方法.WindowsFormsApplicationBase类还提供ShutdownStyle属性,可能对您有用,而不是ApplicationContext.
| 归档时间: |
|
| 查看次数: |
6493 次 |
| 最近记录: |