Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序控制器和应用程序.Run()-在UI结束时停止程序_C#_Mvp - Fatal编程技术网

C# 应用程序控制器和应用程序.Run()-在UI结束时停止程序

C# 应用程序控制器和应用程序.Run()-在UI结束时停止程序,c#,mvp,C#,Mvp,我有一个带导航工作流的应用程序控制器,如下所示: namespace Ordering.UI.Workflow { public static class ApplicationController { private static INavigationWorkflow instance; private static string navigationArgument; public static void Register(

我有一个带导航工作流的应用程序控制器,如下所示:

namespace Ordering.UI.Workflow
{
    public static class ApplicationController
    {
        private static INavigationWorkflow instance;
        private static string navigationArgument;

        public static void Register(INavigationWorkflow service)
        {
            if (service == null)
                throw new ArgumentNullException();
            instance = service;
        }

        public static void NavigateTo(string view)
        {
            if (instance == null)
                throw new InvalidOperationException();
            instance.NavigateTo(view, Argument);
        }

        public static void NavigateTo(string view, string argument)
        {
            if (instance == null)
                throw new InvalidOperationException();
            navigationArgument = argument;
            NavigateTo(view);
        }

        public static string Argument
        {
            get
            {
                return navigationArgument;
            }
        }

    }
}
NavigationWorkflow类:

namespace Ordering.UI.Workflow
{


public interface INavigationWorkflow
{
    void NavigateTo(string uri, string argument);
}

public class NavigationWorkflow : INavigationWorkflow
    {

    Form _mainForm;
    ProductScreen productScreen;

    public NavigationWorkflow() { }

    public NavigationWorkflow(Form mainForm)
    {
        _mainForm = mainForm;
    }

    public void NavigateTo(string view, string argument)
    {
        switch (view)
        {
            case "products":
                if (productScreen != null && !productScreen.IsDisposed)
                {
                    productScreen.Close();
                    productScreen = null;
                }
                if (productScreen == null && productScreen.IsDisposed)
                {
                    productScreen = new ProductScreen();
                }
                productScreen.Show();
                break;
        }
    }
}
 }
在我的Program.cs中,我想这样做:

OrderScreen orderScreen = new OrderScreen();
orderScreen.Show();

NavigationWorkflow workflow = new NavigationWorkflow(orderScreen);
ApplicationController.Register(workflow);

Application.Run();
但每当我的主窗体(
OrderScreen
)关闭时,主应用程序就会继续运行。如何在
应用程序中注册关闭事件。Run()
?我是否必须创建自己的
ApplicationContext
?是否有自动执行此操作的方法?

应用程序。Run()自动创建应用程序上下文。您可以使用Application.ApplicationContext属性获取对它的引用。调用其ExitThread()方法以强制消息循环终止


创建自己的并将其传递给Run()也是可能的,我想不出有什么真正的优势。而不是作为控制器的基类。Run()方法调用在逻辑上也属于您的控制器。

Sorry删除了我的上一个。。你是说在Program.cs或ApplicationController中调用Application.Run(form)?如果我从ApplicationController寄存器方法调用Application.Run(),它会被阻塞吗?Run(mainForm)使它自动运行,而无需编写任何代码。是的,Run()块。