0

我试图了解 WPF 中的线程,这是代码片段:

    public MainWindow()
    {
        InitializeComponent();
        start = delegate()
        {
            statusText.Text = "From Other Thread";
        };
        t = new Thread(start);
        t.Start();
    }

正如书中所说,它会有例外,所以它是。我了解到这是因为调度线程的一些事情。然后我在按钮点击处理函数中放入了一行代码,如下代码:`

public partial class MainWindow : Window
{
    ThreadStart start;
    Thread t;
    public MainWindow()
    {
        InitializeComponent();
        start = delegate()
        {
            statusText.Text = "From Other Thread";
        };
        t = new Thread(start);

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        t.Start();
    }

我希望它会像以前一样有例外,但什么也没发生,文本也没有改变。对我来说太奇怪了。为什么会这样?希望有人可以提供一些帮助。谢谢。

4

1 回答 1

2

为了从另一个线程更新 ui 组件,您必须使用 Dispatcher:

public MainWindow() 
{ 
   InitializeComponent(); 
   start = delegate() 
    { 
       Dispatcher.BeginInvoke(((Action)(() => {statusText.Text = "From Other Thread";})));
    }; 
    t = new Thread(start); 

} 
于 2012-10-16T12:42:23.933 回答