我有一個WPF UI,我想通過調用某些事件異步更新它從另一個線程。異步更新wpf UI從另一個線程異步
我知道如何調用事件並在UI線程中調用它們,但我想做它異步。
public partial class HomeUI
{
public HomeUI()
{
var test = new LogicClass();
test.UI_StartPlaying += StartPlaying;
new Thread(test.Start).Start();
}
private void StartPlaying(object sender, EventArgs e)
{
Dispatcher.Invoke(new Action(() =>
{
var streamAddress = (e as UIUpdateEventArgs).StreamAddress;
vlc.Stop();
vlc.Media = new LocationMedia(streamAddress);
vlc.Play();
}));
}
}
public class LogicClass
{
public event EventHandler UI_StartPlaying;
public void Start()
{
DoSomethings();
UI_StartPlaying(this, new UIUpdateEventArgs(streamAddress));
DoSomethingElse();
}
}
class UIUpdateEventArgs : EventArgs
{
string StreamAddress {get; set;}
public UIUpdateEventArgs(string streamAddress)
{
this.StreamNumber = streamNumber;
}
}
,但在這段代碼,當東西DoSomethingElse()
一部分導致延遲或停止邏輯線程發生,UI凍結。
編輯:在DoSomethingElse()
部分,我運行了2個線程,其中一個執行所有數據庫事務並且有一些延遲。這個延遲使得vlc在用戶界面上暫停(凍結一個隨機幀),然後使整個UI凍結。
顯然,當我評論這些交易時,程序正常工作。
我該怎麼做才能使UIEventUpdate
與我的Logic Thread
異步運行?
_當某件事發生在DoSomethingElse()部分,導致延遲或停止邏輯thread_它不應該,因爲DoSomethingElse運行在一個線程上。 '東西'需要解釋。 –
我們需要了解您如何運行Db交易。 –
我知道所有的數據庫事務都可以寫得更好,但是我想要防止UI凍結或者其他任何原因。如何在UI上播放流,而不依賴於程序的其他部分。 – aisa