【发布时间】:2014-05-22 14:32:32
【问题描述】:
在我的应用程序中,它使用另一个应用程序(在托盘中运行)来打印收据,我需要做这三件事:
- 在 mainApplication 启动时打开进程
- mainApplication 关闭或更改有关打印机的任何信息时关闭进程
- 如果出现任何错误,请保持进程处于活动状态
第一点很简单,我只是简单
Process.Start("_ReceiptPrinter.exe");
并且处理工作;)
但是现在,另外两个问题:
-
关闭过程。我试过这段代码:
Process[] allProcs = Process.GetProcesses(); foreach (Process proc in allProcs) { ProcessThreadCollection myThreads = proc.Threads; if (proc.ProcessName == "_ReceiptPrinter") { proc.Close(); } }
不幸的是,我仍然可以在托盘中看到图标,并且进程仍在运行。
- 保持进程活跃。我的主要应用程序在 WPF 中,托盘中的应用程序是在 WinForms 上编写的。也许有任何方法可以处理 ANY WinForm 应用程序退出事件(嗯,任何,但不是这个,它只是简单地从另一个应用程序中关闭它),然后重新打开它?
【问题讨论】:
-
为什么你的进程一开始就死掉了?如果您遇到错误并且它正在杀死您的进程,那么您需要考虑错误处理。
-
您为什么没有一个应用程序?可以将托盘功能添加到 WPF 应用程序。我使用了此线程中引用的 NotifyIcon stackoverflow.com/questions/1472633/…
-
@kenny - 原因是,我在 WPF 中使用的 DLL 不起作用。打印收据后,出现堆栈溢出错误。工作是空的,我的项目。在 WinForms 中一切正常。
-
@IanO'Brien - 在我的应用程序 (wpf) 中,我有方法来捕获未处理的异常。这使应用程序保持打开状态(我的意思是我有带有错误消息的窗口和允许用户向我发送日志的按钮)。但不确定WinForms中是否有类似的东西。编辑:在 WPF 中我使用 Current.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(Current_DispatcherUnhandledException);
-
好吧,也许这会有所帮助:System.Windows.Forms.Application.ThreadException