c# - 立即启动流程,无需卡住申请

标签 c# wpf process

我需要流程方面的帮助。在我的应用程序中,我正在打印收据。直到今天,每次用户打印它时,应用程序都会被卡住,直到打印收据为止。所以我决定使用具有后台优先级的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/

相关文章:

c# - Process.GetCurrentProcess().MainWindowHandle 返回零

wpf - 如何围绕WPF中的特定点旋转,平移和缩放控件对象

c# - WPF 交互触发器 CallMethodAction

algorithm - 使用什么算法来格式化 EDIFACT 文件?

c# - 如何使用 asp.net mvc 3 填充 jqgrid

c# - Telerik GridView 粘贴

c# - XNA 关闭游戏

c# - Entity Framework 6 事务回滚

c# - 在不创建对象 C# 的情况下获取编码消息的长度(以字节为单位)

c# - 为什么我在 Visual Studio 中的 HTML 按钮在双击时没有创建事件处理程序?