2

我的文本框有问题。
我有一个代表 GUI 线程的类和一个用于工作线程的类,它执行一些网络工作,然后必须将日志添加到 GUI 线程的文本框中,以便您可以查看后台发生的情况。
但是,我的问题是 GUI 上什么也没发生,只有调用 addLine() 的调试信息在控制台中。
应该添加日志的方法 addLine() 被调用,但似乎 AppendText() 什么都不做。
我很确定这与线程有关,但我不确定如何解决这个问题。

这是代码:

工作线程:

    Form1 form = new Form1();
    // This method gets called in the worker thread when a new log is available
    private void HandleMessage(Log args)
    {
        // Using an instance of my form and calling the function addLine()
        form.addLine(args.Message);
    }

图形用户界面线程:

    // This method gets called from the worker thread
    public void addLine(String line)
    {
        // Outputting debug information to the console to see if the function gets called, it does get called
        Console.WriteLine("addLine called: " + line);
        // Trying to append text to the textbox, console is the textbox variable
        // This pretty much does nothing from the worker thread
        // Accessing it from the GUI thread works just fine
        console.AppendText("\r\n" + line);

        // Scrolling to the end
        console.SelectionStart = console.Text.Length;
        console.ScrollToCaret();
    }

我已经尝试做一些 Invoke 的东西,但未能正确使用它。
GUI 要么自己锁定,要么继续什么都不做。

4

1 回答 1

8

如果您不在 UI 线程上,则无法使用 winforms UI。尝试:

console.Invoke((MethodInvoker)delegate {
    console.AppendText("\r\n" + line);

    console.SelectionStart = console.Text.Length;
    console.ScrollToCaret();
});

这会将它撞到 UI 线程上。

于 2012-07-22T19:14:13.343 回答