WPF下用副線程修改主線程的UI控件屬性

       C#用副線程直接去修改主線程的UI控件會報出異常,例如

       這是因爲副線程不能夠直接去調用主線程的UI控件,就算不在Winform或者WPF下也要記住這點,那麼我們怎麼在副線程調用主線程的UI控件呢?解決方案是使用副線程註冊事件通知主線程自己去修改UI控件。

       在Winform中,方法如下:

private void button1_Click(object sender, EventArgs e)
{
    Thread myThread = new Thread (new ThreadStart(fun));
    myThread.Start();
}

private void fun()
{
    textBox1.BeginInvoke(new Action(()=>{textBox1.Text="CSDN";}));
}

       在WPF中,方法如下:

private void Button_Click(object sender, RoutedEventArgs e)
{
    Thread play_Thread = new Thread(fun);
    play_Thread.Start();
}

private void fun()
{
    img.Dispatcher.BeginInvoke(new Action(() => { img.Source = ByteArrayToBitmapImage(dst); 
    }));
}

       線程中進行循環記得Thread.Sleep(),就算while(true)也不怕卡死啦!

       發現一個小問題,點右上角的X後程序還在進行沒有關閉,加入下面的方法,點右上角的X後直接退出程序。

   protected override void OnClosed(EventArgs e)
   {         
       System.Environment.Exit(0);
       base.OnClosed(e);
   }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章