2011-09-21 53 views
5

我期待橱窗(WPF)是在单独的类库项目作为新的独立的进程定义。有没有办法做到这一点?如何在新的进程启动第二个项目的新实例

我要开始新的过程中,第二个项目实例,因为那里呆占用的内存,当我通过这种方式启动:

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

我有一个解决方案有多个项目。

  • 启动项目是WPF应用程序,输出类型:Windows应用程序(exe文件)。
  • 所有其他项目都是WFP应用程序,输出类型为:类库(dll文件)。

现在我运行这段代码(在建的DLL这一解决方案的其他项目)“应用程序”:

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

我想运行过程中出现的是应用在新的进程......通常我会使用Process.Start(),但我不能是这种情况,因为它需要exe文件作为agrument,我有(并且想要)dll。

+1

你能解释第二个项目是什么吗? –

+1

即使英文不是很棒,请添加更多详细信息我们会尽力为您服务 – Coops

+0

您试图在另一个应用程序内启动第二个应用程序,是否正确? – Keeano

回答

3

您可以将命令行参数传递给主.exe文件,告诉它运行哪个“子应用程序”。然后,主.exe可以在新进程中启动自己,并告诉新实例运行哪个子应用程序。例如,在主要的.exe程序,把逻辑像这样在你的应用程序类:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     //See if exactly one command line argument was passed 
     if (e.Args.Length == 1) 
     { 
      //See if the argument is one of our 'known' values 
      switch (e.Args[0]) 
      { 
       case "launchApp2": 
        secondProject.WPFWindow win2 = new secondProject.WPFWindow(); 
        win2.Show(); 
        break; 
       case "launchApp3": 
        thirdProject.OtherWPFWindow win3 = new thirdProject.OtherWPFWindow(); 
        win3.Show(); 
        break; 
      } 
     } 

     //Probably want to call the base class always? 
     base.OnStartup(e); 
    } 
} 

然后任何时候你要启动的子应用程序中的一个新的进程,你可以这样做是这样的:

public void LaunchApp2() 
{ 
    //Start a new process that is ourself and pass a command line parameter to tell 
    // that new instance to launch App2 
    Process.Start(Assembly.GetEntryAssembly().Location, "launchApp2"); 
} 
+0

太棒了!这可能是我正在寻找的:)我会尽快测试它,我会让你知道。 – DefinitionHigh

+0

非常感谢!就是这个! :) 顺便说一句我不会总是调用基类。 – DefinitionHigh

+0

请问,我能以某种方式标记这个过程吗?例如通过设置过程描述?我想prevet同一个项目的多个实例.. – DefinitionHigh

0

让我们假设你有2个项目的解决方案 - 一个项目编译到一个应用程序(EXE),而第二编译成一个类库(DLL)。我假设DLL有一些你想从EXE开始定义的类型(比如说,一个窗口)。

要做到这一点最简单的方法,简单地添加到DLL的引用。右键单击Solution Explorer中的EXE项目,然后选择添加引用...。等待对话框打开时分钟。从项目选项卡中选择DLL项目。点击确定。

现在,在你的EXE项目,可WPFWindow将作为一个导入的类型。你需要一个

using secondProject;

添加到使用WPFWindow每个代码文件的顶部。我通常使用键盘快捷键CTRL + Period自动执行此操作。

我所描述的方法是使用C#中的DLL的标准方法。你可以手动加载它们,但这有点复杂,可能不是你想要做的。

编辑:

阿列克谢是正确的。我认为我们在这里有一个XY Problem。你正在试图做的可能是很容易的,但是这种方法(实例在DLL中定义的窗口)不是。

请注意,即使代码本身是在DLL中定义的,您运行的任何代码(在您的情况下,您的WPFWindow)都必须来自应用程序。自身产生的DLL通常提供没有关于任何代码如何运行包含在信息发送到操作系统。

考虑增加是运行在WPFWindow您拨打使用Process另一个EXE项目。但是,这个建议可能是错误的,因为我们仍然不知道你的最终目标是什么。你问:“我如何像鸟一样拍动我的翅膀?”当正确的问题可以是“我如何购买机票?”

+1

它已经完成。我知道如何从项目2运行APP。它通过以下代码完成:secondProject.WPFWindow win = new secondProject.WPFWindow(); win.Show(); 有人可以理解我正在找到方法如何在新过程中运行它? – DefinitionHigh

相关问题