动态传递和使用数据到WPF应用程序而不重新启动它

时间:2012-11-01 12:58:13

标签: c# wpf events

这是我在StackOverflow上的第一篇文章,所以请耐心等待我:)

我正在寻找一种方法将值传递给已经运行的应用程序。应用程序应该能够接受此值并在其生命周期中将其用于进一步操作。我不想注销/重启应用程序以使用更新的值。

场景将是这样的:

应用程序使用MachineName在实例化时初始化并填充某些对象。一旦它启动并运行,我想将一个不同的工作站名称传递给应用程序(可能来自命令行),应用程序应该能够使用此MachineName并进一步使用它。我不介意我是否再次执行相同的操作来初始化具有新MachineName名称的所需对象。

有问题的应用程序是一个带有C#的WPF应用程序。它也使用了一些WCF服务。我正在考虑使用通用的注册表项来存储工作站名称,并且需要在应用程序中使用/更新此注册表项。所以它应该是第一个接触点。但我不确定这是否是一种更好的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

使用FileSystemWatcher在磁盘上观看文件非常简单。当您的应用获得更改通知时,请重新阅读该文件的内容并更新您的应用状态。

答案 1 :(得分:0)

应用程序在启动时侦听套接字端口或监视共享文件,如果使用参数再次调用应用程序,只需打开套接字端口或将命令写入文件,第一个应用程序可以执行以下操作:初始化。

答案 2 :(得分:0)

首先,我认为你可能会使事情过于复杂化。如果你需要做的只是给你的应用程序一个新的字符串“MachineName”,那么你有几个选项(这当然不是你所有的选择,只需要考虑一些):

  1. 由于这是一个WPF应用程序,我们可以假设一些用户正在与它进行交互...否则它可能只是一个控制台应用程序。如果是这种情况,请创建一个视图,使用户能够更改MachineName。也许是一个ComboBox,列出了所有可用的MachineNames和一个按钮,可以开始重新初始化。
  2. 你显然已经有了用于服务电话的管道。您可以让您的应用程序充当客户端和服务,允许您远程(读取:在此应用程序之外)更新您的MachineName。
  3. 您可以将此应用程序设置为监视特定目录或文件(由@jlew指出),当该文件发生某些更改时,您的应用程序将读取更改(新MachineName)并开始重新初始化例程。
  4. 我不知道你的全部要求,但我可能会为1和2设置它,这会给你一点灵活性。