Обновление текстового поля, пока другой поток работает WPF - PullRequest
1 голос
/ 21 октября 2011

Вот архитектура моего приложения.У меня есть сценарий Perl, который вызывается с помощью метода ниже по нажатию кнопки.

        ProcessStartInfo psStartInfo = new ProcessStartInfo("perl.exe");
        psStartInfo.Arguments = paramStr;
        psStartInfo.UseShellExecute = false;
        psStartInfo.RedirectStandardOutput = true;
        psStartInfo.RedirectStandardError = true;
        psStartInfo.CreateNoWindow = false;


        ps.StartInfo = psStartInfo;
        ps.Start();
        string os = ps.StandardOutput.ReadToEnd();

Приведенный выше код выполняется успешно.Есть текстовый файл, который генерируется с использованием скрипта Perl, который я запустил в вышеупомянутом коде.Я должен прочитать этот файл и показать все в этом в моем текстовом поле WPF.Этот Perl-файл обновляется каждые 5–10 секунд.Я использую указанный ниже код, чтобы прочитать файл и показать его в моем текстовом поле.

        dispatcherTimer = new DispatcherTimer();
        dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
        dispatcherTimer.Interval = new TimeSpan(0, 0, 30);
        dispatcherTimer.Start();

     private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        txtExecLog.Text = "";

        if (File.Exists("C:\\FlashAuto\\Execution_Logs\\log.txt"))
        {
            File.Copy("C:\\FlashAuto\\Execution_Logs\\log.txt", "C:\\FlashAuto\\Temp\\log.txt", true);
            TextReader readLogs = new StreamReader("C:\\FlashAuto\\Temp\\log.txt");
            string line = readLogs.ReadLine();
            while (line != null)
            {
                txtExecLog.Text += "\n" + line;
                line = readLogs.ReadLine();
                txtExecLog.ScrollToEnd();
            }

            CountLines = txtExecLog.LineCount - 1;
            readLogs.Close();
            // Forcing the CommandManager to raise the RequerySuggested event
            txtExecLog.ScrollToEnd();
            CommandManager.InvalidateRequerySuggested();
            readLogs.Dispose();
        }
        else
        {
            txtExecLog.Text += "log file not found at: "+DateTime.Now.ToString();
        }

    }

Вот проблема:

Чтение и запись в текстовое поле успешно завершено, но естьогромный кусок памяти, который съедает мое приложение.Если я отключу ведение журнала, использование памяти будет оптимальным.

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