我在按钮单击事件处理程序中创建并启动一个线程。该线程执行一些同步工作,并通过触发事件通知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;
});
}
}
答案 0 :(得分:6)
假设 设备上的屏幕刷新率为16.6毫秒,您将以快速的形式向UI /主线程发送100,000条消息for
循环可以在后台线程上执行。
现在UI必须处理这些消息,(16.6ms * 100,000)/ 1000 ms / sec,并且您有27分钟的更新。这不是一件实事。