从ApplicationContext退出应用程序

mat*_*wen 5 .net c#

我有一个自定义的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)

什么是正确的技术?

Han*_*ant 9

   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.