簡體   English   中英

為什么非UI線程會阻塞UI?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM