use*_*234 0 c# multithreading xamarin
我在按钮单击事件处理程序中创建并启动一个线程.该线程执行一些同步工作,并通过触发事件通知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;
});
}
}
Run Code Online (Sandbox Code Playgroud)
假设设备上的屏幕刷新率为16.6毫秒,那么就像在循环可以在后台线程上执行的那样快速地向UI /主线程发送100,000条消息for.
现在UI必须处理这些消息,(16.6ms*100,000)/ 1000 ms/sec,并且您有27分钟的更新.这不是一件实事.