我需要流程方面的帮助。在我的应用程序中,我正在打印收据。直到今天,每次用户打印它时,应用程序都会被卡住,直到打印收据为止。所以我决定使用具有后台优先级的Process。实际上它是有效的 - 用户可以在打印收据的同时使用应用程序。问题是,我有重新记录用户每 X 个收据打印的功能。它的工作原理就像
if (current_receipt_index_in_DB % restart_every_X_receipt == 0) - restartApp;
因此,如果当前索引 = 20,并且 X = 2,它将每 2 个收据重新启动一次。
问题是,现在,当我在后台运行打印收据的进程时,并且需要从代码重新启动应用程序 - 收据根本不打印。
代码:
PrintReceipt prRec = new PrintReceipt();
Thread t = new Thread(new ThreadStart(() => prRec.PrintReceiptParagon(....parameters....)));
t.SetApartmentState(ApartmentState.STA);
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
t.Start();
}));
以及重新启动应用程序的功能:
string appPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Process[] procs = Process.GetProcessesByName("myApp.exe");
Process.Start(System.IO.Path.Combine(appPath, "myApp.exe"), "-restart " + paramID);
Application.Current.Shutdown();
Thread.Sleep(2000);
foreach (Process p in procs)
{
p.Kill();
}
好吧,也许那些 p.Kill 并不是真正需要的,但说真的 - 我已经尝试了所有方法,但不知道如何才能使其工作..
感谢您的帮助!
最佳答案
您将需要将收据打印过程创建为另一个 EXE。使其成为接收必要命令行参数的控制台应用程序。当你启动它时:
ProcessStartInfo psi = new ProcessStartInfo(pathToExe, args);
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(psi);
关于c# - 立即启动流程,无需卡住申请,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401654/