我想在單擊按鈕啓動後更改wpf控件狀態。在啓動線程之前無法更改WPF控件狀態
這張照片是我想要的。
以下是我的代碼
private bool _bWorking = false;
public delegate void UpdateStatusDelegate();
private void SetStatus(bool bEnable)
{
if (bEnable)
{
tbName.IsReadOnly = false;
barStatus.Visibility = Visibility.Hidden;
btnStart.IsEnabled = true;
btnStop.IsEnabled = false;
btnClose.IsEnabled = true;
}
else
{
tbName.IsReadOnly = true;
barStatus.Visibility = Visibility.Visible;
btnStart.IsEnabled = false;
btnStop.IsEnabled = true;
btnClose.IsEnabled = false;
}
}
internal void UpdateStatus()
{
SetStatus(true);
_bWorking = false;
}
private void ThreadFunc()
{
//for (; ;)
//{
// // do something here
// if (_bWorking == false)
// break;
//}
Thread.Sleep(500);
this.Dispatcher.Invoke(new UpdateStatusDelegate(UpdateStatus));
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
_bWorking = true;
SetStatus(false);
this.UpdateLayout();//this.InvalidateVisual();
try
{
Thread t = new Thread(new ThreadStart(() =>
{
ThreadFunc();
}));
t.IsBackground = true;
t.Name = "test status";
t.Start();
while (t.IsAlive)
{
// wait thread exit
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
_bWorking = false;
SetStatus(true);
}
但實際上我點擊按鈕啓動後,該UI似乎凍結,線程退出,成爲正常的UI。
我的VS是VS2010。
Force a WPF control to refresh?
這個職位不適合我。
編輯總結:
附加委託無效UpdateStatusDelegate()和功能UpdateStatus()我的代碼
可能重複[如何更新在C#中的另一個線程的GUI?](http://stackoverflow.com/questions/661561/how-to -update-the-gui-from-another-thread-in-c) – Gusdor
謝謝,但它對我不起作用。那篇文章談到了WinForm,我的問題是關於WPF。 – Rock