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);
}