[英]Why would a non-UI thread block the UI?
我在單擊按鈕的事件處理程序中創建並啟動線程。 該線程執行一些同步工作,並通過觸發事件通知UI線程進度。
問題是這鎖定了UI線程,我不確定為什么。
public partial class MainPage : ContentPage
{
private event EventHandler<double> ProgressChanged;
public MainPage()
{
InitializeComponent();
button.Clicked += Button_Clicked;
ProgressChanged += MainPage_ProgressChanged;
}
private void Button_Clicked(object sender, EventArgs e)
{
new Thread(() =>
{
for (double i = 0; i <= 1; i += .00001)
{
ProgressChanged.Invoke(this, i);
}
}).Start();
}
private void MainPage_ProgressChanged(object sender, double e)
{
Device.BeginInvokeOnMainThread(() =>
{
progressBar.Progress = e;
});
}
}
假設設備上的屏幕刷新率為16.6毫秒,則您正以for
循環可以在后台線程上執行的速度向UI /主線程中觸發100,000條消息。
現在,UI必須處理這些消息,(16.6ms * 100,000)/ 1000 ms / sec,並且您有27分鍾的更新時間。 那只是不切實際的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.