Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的线程问题_C#_.net_Wpf - Fatal编程技术网

C# WPF中的线程问题

C# WPF中的线程问题,c#,.net,wpf,C#,.net,Wpf,我试图学习WPF中的线程 这是代码片段: public MainWindow() { InitializeComponent(); start = delegate() { statusText.Text = "From Other Thread"; }; t = new Thread(start); t.Start(); } 正如书中所说,它会有例外

我试图学习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();
    }

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

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

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

} 

奇怪的是,我使用按钮点击也出现了异常我再试一次,现在出现了异常,不知道为什么,可能是我太粗心了:(