Код после вызова Process.Start () не запущен, но работает при отладке C# - PullRequest
0 голосов
/ 09 июля 2020

Вот функция, которая вызывает Process.Start().

Я просто открываю две папки в WinMerge. Эта часть работает правильно и выскакивает это приложение. Однако ни один из написанного после этого кода не выполняется. Однако, когда я помещаю точку останова на p.Dispose() или p.Start() и нажимаю «продолжить», все после этого работает правильно.

private void openWinMerge(string leftFile, string rightFile)
        {
            string args = "/C /f *.xml " + leftFile + " " + rightFile;
            Process p = new Process();
            p.StartInfo.FileName = "C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe";
            p.StartInfo.Arguments = args;
            p.StartInfo.CreateNoWindow = true;
            if (p.Start())
            {
                p.Dispose();
                return;
            }
        }

Здесь я вызываю функцию, вызывающую Process.Start(). Ни один из приведенных ниже кодов openWinMerge() не запускается.


private void btnStart_Click(object sender, EventArgs e)
        {
            if (txtSerial.Text.Length == 9)
            {
                PO.Number = txtSerial.Text.ToUpper();
                PO.SerialSearch = true;
                if (PO.Search())
                {
                    txtPO.Text = PO.Field.ProductionOrderNumber;
                    search();
                    createFolders();
                    copyDefaultFiles();
                    copyBackupFiles();
                    openWinMerge("\"" + Path.Combine(path, "INITIAL") + "\"", "\"" + Path.Combine(path, "Default") + "\"");
                    copyFinalXML();
                    return;
                }
                MessageBox.Show("Invalid Serial");
            } else if (txtPO.Text.Length == 12) 
            {
                PO.Number = txtPO.Text.ToUpper();
                if (PO.Search())
                {
                    txtSerial.Text = PO.Field.SerialNumber;
                    search();
                    createFolders();
                    copyDefaultFiles();
                    copyBackupFiles();
                    openWinMerge("\"" + Path.Combine(path, "INITIAL") + "\"", "\"" + Path.Combine(path, "Default") + "\"");
                    copyFinalXML();
                    return;
                }
                MessageBox.Show("Invalid PO or Missing Serial");
            } else
            {
                MessageBox.Show("Please Enter either Serial or PO of Analyzer");
            }
        }

Обновление:

Я написал другой код ниже openWinMerge(), и он запускается, поэтому моя проблема in copyFinalXML()

Вот код для этого

private void copyFinalXML()
        {
            try
            {
                string[] files = Directory.GetFiles(Path.Combine(path,"INITIAL"));
                Task.Delay(200);
                foreach (string file in files)
                {
                    // Will not overwrite if the destination file already exists.
                    string[] folders = file.Split('\\');
                    string filename = folders[folders.Length - 1];
                    if (filename.Equals("config.xml") || filename.Equals("service.xml") || filename.Equals("system.xml"))
                    {
                        string d = Path.Combine(Path.Combine(path, "FINAL"), filename);
                        File.Copy(file, d);
                        Task.Delay(500);
                        openNotePad(d);
                    }
                }
            }
            // Catch exception if the file was already copied.
            catch (IOException copyError)
            {
                MessageBox.Show(copyError.Message);
            }
        }



 private void openNotePad(string filename)
        {
            //Process.Start("C:\\Program Files(x86)\\Notepad++\\notepad++.exe", "\"" + filename + "\"");
            Process.Start(@"notepad++.exe", "\"" + filename + "\"");
            return;
        }

1 Ответ

0 голосов
/ 09 июля 2020

Добавьте p.WaitForExit(); в свой код непосредственно перед кодом, который вы хотите выполнить, после того, как он завершит выполнение процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...