【问题标题】:Access commandline arguments to WPF application in separate appdomain在单独的 appdomain 中访问 WPF 应用程序的命令行参数
【发布时间】:2012-02-02 20:24:19
【问题描述】:

是否有一种简洁的方法来访问作为启动 WPF 应用程序的 AppDomain.ExecuteAssembly 调用的一部分传递的命令行参数?

我正在一个单独的应用程序域中启动一个 WPF 应用程序,并将参数传递给应用程序,如下所示:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.ExecuteAssembly(path, new[] { "arg1", "arg2" });

有一个work-around 可以访问这些参数,因为Environment.GetCommandLineArgs()StartupEventArgs 都返回原始应用程序的命令行参数,而不是使用 ExecuteAssembly() 启动的那个。

我想访问传递给 WPF 应用程序的参数,而不必手动定义 Main 方法,最好使用 StartupEventArgs。有没有办法这样做?

在单独的进程中启动 WPF 应用程序是可行的,但会降低性能并使调试变得复杂。

【问题讨论】:

  • 考虑到命令行参数只是 string 并且它们是不可变的,为什么不将它保存在一些 string 属性中并传递该属性的值。您可以在不同域之间传递字符串吗?我想,是的。
  • 谢谢,Tigran,这让我找到了一个我很满意的解决方案,使用 AppDomain.SetData。系统不会让我再过 8 小时再发布答案,但我会尽快发布完整的解决方案

标签: c# wpf command-line-arguments appdomain


【解决方案1】:

Tigran 的评论让我找到了一个令我满意的解决方案,使用 AppDomain.SetData 而不是使用命令行参数。基本轮廓如下所示:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name");
moduleDomain.SetData("arg1", "arg1Value");
moduleDomain.SetData("arg2", "arg2Value");
moduleDomain.ExecuteAssembly(path);

然后,访问 WPF 应用程序中的“参数”:

string arg1Value = AppDomain.CurrentDomain.GetData("arg1");
string arg2Value = AppDomain.CurrentDomain.GetData("arg2");

这很适合我的用例。

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多