Как обновить элемент управления из статического метода, используя beginInvoke?

Кажется, я попался в Catch 22. Я использую BeginInvoke для обновления элемента управления в моей форме xaml. Однако beginInvoke требует статического метода, и статический метод не может обновить элемент управления xaml.

public delegate void UpdateTextCallback(string message);

Вот мой BeginInvoke:

public static void runProcess2()
{
    Process process = new Process();
    process.StartInfo.FileName = @"\\lcsrel\prerelease\lcs\6.0\se_w16_ship\Latest\en-US\amd64fre\Test\Tools\RunUCTest.cmd";
    process.StartInfo.Arguments = @"/RunTestsVM /tests:+suite=null  /Topology:eepool_ap_onprem /LeaveVmsRunning /VMCopyBuild:Minimal ";

    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.CreateNoWindow = true;

    process.OutputDataReceived += (sender, e) =>
    {
        var localSender = sender;
        // Prepend line numbers to each line of the output.
        if (!String.IsNullOrEmpty(e.Data))
        {
            try
            {
                Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, new UpdateTextCallback(UpdateText), "\n" + e.Data);

            }
            catch (Exception ex)
            {
                string msg = ex.Message;
            }

        };
    };

process.StartInfo.RedirectStandardInput = true;

process.Start();

// Asynchronously read the standard output of the spawned process. 
// This raises OutputDataReceived events for each line of output.
process.BeginOutputReadLine();
Task.Factory.StartNew(
    () =>
        {
            process.WaitForExit();
            process.Close();

        });
}

Вот метод обновления:

private static void UpdateText(string message)
{        
   rt_output.AppendText(message);
}

Но здесь я получаю:

Ссылка на объект требуется для нестатического поля, метода или свойства Windows4.rt_output.

rt_output это контроль.

Если я удаляю ключевое слово static из этого метода, я получаю ошибку в BeginInvoke:

Ссылка на объект требуется для нестатического поля, метода или свойства Windows4.UpdateText(string).

0 ответов

Другие вопросы по тегам