从其他项目冻结应用程序打印收据

时间:2013-12-19 11:01:17

标签: c# process backgroundworker

我知道有很多像这样的话题,但我读了几乎所有的话,仍然没有答案。所以在开始时我会展示代码。

点击我的应用程序上的按钮后,我打开带有参数打印收据的.exe文件:

string[] Arguments = { ....... };
            string arg = "";
            for (int i = 0; i < Arguments.Length; i++)
            {
                arg += "\"" + Arguments[i] + "\" ";
            }

            string appPath = Directory.GetCurrentDirectory().ToString();


            if (File.Exists(ExecutableFilePath))
            {
                var proc = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = ExecutableFilePath,
                        Arguments = arg,
                        WorkingDirectory = System.IO.Path.Combine(appPath),
                        UseShellExecute = false,
                        RedirectStandardOutput = false,
                        CreateNoWindow = false,
                    }
                };

                proc.Start();
            }

实际上,更具体一点就是:

Button.Click方法:

  • 检查输入的价格&gt; =收货价格
  • 按名称切换按钮按钮(卡,现金,优惠券等)和转到方法printReceipt

printReceipt方法:

  • run方法,包含exe声明等(如上所述)。

printReceipt.exe代码:

 public PrintReceiptForm(string[] Args)
        {
            InitializeComponent();
            this.Load += new EventHandler(PrintReceiptForm_Load);
            worker.DoWork += new DoWorkEventHandler(worker_DoWork);
            worker.RunWorkerCompleted + =new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
        }



void PrintReceiptForm_Load(object sender, EventArgs e)
        {
            if (!worker.IsBusy)
            {
                worker.RunWorkerAsync();
            }
        }
  • worker.doWork运行方法1(将所有数据从数据库加载到列表),方法2(从数据库到结构的加载方法),方法3(使用列表从m1,m2打印收据)。

我不得不说,这并没有太大变化。我想要实现的是,在用户点击按钮后,ui将在1秒后消失。在这个情况下,当我在receiptList中有150个产品时,我需要等待10秒的应用程序冻结,然后在3-5秒之后才能打印收据。

也许我做错了什么?不是很好的线程,BackgroundWorkers,Process'es等。

谢谢!

0 个答案:

没有答案