C # зависает при запуске пакетного потока - PullRequest
2 голосов
/ 18 февраля 2011

Эй, люди! Я работаю с моим небольшим инструментом под названием MineMe, и он используется для работы с серверами Minecraft.

Итак, я создал поток файлов, который должен передавать выходные данные start_base.cmd (файл, который запускает сервер). Что не так, так это то, что окно с моей формой зависает, пока я не убью процесс (java.exe - запускается start_base.cmd)

Вот мой код:

ProcessStartInfo processInfo = new System.Diagnostics.ProcessStartInfo("CMD");

        processInfo.WindowStyle = ProcessWindowStyle.Normal;

        processInfo.RedirectStandardOutput = true;
        processInfo.RedirectStandardInput = true;
        processInfo.RedirectStandardError = true;
        processInfo.CreateNoWindow = true;
        processInfo.UseShellExecute = false;

        Process p = new Process();
        p.StartInfo = processInfo;
        p.Start();

        TextWriter tw = p.StandardInput;


        tw.Flush();
        tw.WriteLine("start_base.cmd");
        tw.Close();

        TextReader tr = p.StandardOutput;
        string output = tr.ReadLine();

        while (output != null)
        {
            this.lg_log.Items.Add(output); // add the output string to a list box
            output = tr.ReadLine();
        }

Что здесь не так? :) Пожалуйста, помогите мне ..

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

В вашем потоке пользовательского интерфейса запустите другой поток для обработки цикла while:

Thread t = new Thread(new ThreadStart(DoWork));
t.Start();


public void DoWork()
{
    // work to be done on another thread
}
2 голосов
/ 18 февраля 2011

Проблема в вашей петле while. Это необходимо сделать в отдельном потоке (т.е. не в потоке пользовательского интерфейса).

Если вы вызываете вышеуказанный код с помощью нажатия кнопки (или какого-либо другого элемента управления пользовательского интерфейса), вместо этого вы должны использовать поток BackgroundWorker или поток из пула потоков (или даже просто обычный поток потоков) для этой задачи.

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