我有一个WPF项目,它应该能够独立运行,也可以作为引用DLL运行。
我正在尝试从另一个WPF项目运行WPF项目
Project1需要加载Project2
Project1需要从其App.xaml.cs整体运行Project2,因为这是绑定DataContexts的地方。以下是Project2:的App.xaml.cs
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
Dictionary<Type, Type> viewRegistry = new Dictionary<Type, Type>();
viewRegistry.Add(typeof(ImageUploaderViewModel), typeof(ImageUploaderView));
viewRegistry.Add(typeof(CodBoxViewModel), typeof(CodBoxView));
Type viewType = viewRegistry[typeof(ImageUploaderViewModel)];
MessageBox.Show("Hello World");
Window view = (Window)Activator.CreateInstance(viewType);
view.DataContext = new ImageUploaderViewModel(viewRegistry);
view.Show();
}
}
这是我试图称之为项目2 的地方
private void LoadProject2()
{
string assemblyName = string.Format("{0}\Project2.dll", new
FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName);
Application app = LoadAssembly(assemblyName, "App");
app.Run();
}
private Application LoadAssembly(String assemblyName, String typeName)
{
try
{
Assembly assemblyInstance = Assembly.LoadFrom(assemblyName);
Application app;
foreach (Type t in assemblyInstance.GetTypes().Where(t => String.Equals(t.Name, typeName, StringComparison.OrdinalIgnoreCase)))
{
app = assemblyInstance.CreateInstance(t.FullName) as Application;
return app;
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(string.Format("Failed to load window from{0}{1}", assemblyName, ex.Message));
throw new Exception(string.Format("Failed to load external window{0}", assemblyName), ex);
}
}
有了这个,我可以获得应用程序,但我得到了一个错误";无法创建多个系统。Windows。同一AppDomain中的应用程序实例&";。如果没有2个应用程序实例,我不知道如何实现这一点。谢谢
如果您想启动另一个应用程序,您应该编译另一个程序,并使用Process.Start
API在新进程中启动它。
不能在同一进程中运行两个WPF应用程序,这样做也没有任何意义。
如果App.xaml.cs
中的DataContexts gets binded
,那么您可能应该将代码重构到一个单独的类库中,您可以从任何应用程序中包括该类库。将代码从OnStartup
移到类库中的类的一个已解码的方法中,只需从单个运行的应用程序的OnStartup
方法中调用此方法即可。