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()块。