Rye*_*Guy 3 c# multithreading xamarin.ios xamarin
我在使用Xamarin更新UI时遇到困难。目的是制作响应式UI,以便用户知道应用程序正在思考。以下是我的尝试。
尝试1
private void BeginProcess(string fileName)
{
Device.BeginInvokeOnMainThread(() => {
iContent.Text = "UI Successfully updated.";
});
Device.BeginInvokeOnMainThread(() => {
ProccessFolder testMethod = new ProccessFolder.Initialize(fileName);
});
}
Run Code Online (Sandbox Code Playgroud)
尝试2
private void UpdateUI () {
iContent.Text = "UI Successfully updated.";
}
private void BeginProcess(string fileName)
{
System.Threading.Thread t = new System.Threading.Thread(UpdateUI);
t.Priority = System.Threading.ThreadPriority.Highest;
t.IsBackground = false;
t.Start();
Device.BeginInvokeOnMainThread(() => {
ProccessFolder testMethod = new ProccessFolder.Initialize(fileName);
});
}
Run Code Online (Sandbox Code Playgroud)
尝试3
private void BeginProcess(string fileName)
{
Device.BeginInvokeOnMainThread(() => {
iContent.Text = "UI Successfully updated.";
});
Task.Delay(5000);
Device.BeginInvokeOnMainThread(() => {
ProccessFolder testMethod = new ProccessFolder.Initialize(fileName);
});
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些都不起作用。如果我将ProcessFolder方法放置在后台线程中,并在主线程上调用UI更改,那将起作用。但是,ProcessFolder方法的完成时间较慢。
关于如何在仍在主线程上执行ProcessFolder的同时如何更新UI的任何建议?
有时,当您尝试从一种方法中更新主ui上的某些内容时,具体取决于您编写(和/或构造)的方式,这可能意味着主调度程序在更新主ui之前等待该方法完成。
如果您尝试下面的示例,则它将在每次foreach迭代后成功完成UI更新,因为完成它的初始任务时,它想退出for循环并点击我们的主线程调用,该主线程必须在循环之前完成再次迭代。
private void BeginProcess()
{
Task.Run(()=>{
for (int i = 0; i < 100; i++)
{
// Perform a task
BeginInvokeOnMainThread(() => {
iContent.Text = "UI Successfully updated: " + i " times out of 100";
});
}
})
}
Run Code Online (Sandbox Code Playgroud)
您有时可以使用以下方法来复制这种效果:
NSRunLoop.Current.RunUntil(1000);
Run Code Online (Sandbox Code Playgroud)
在调用“ BeginInvokeOnMainThread”委托时允许UI赶上。
| 归档时间: |
|
| 查看次数: |
3445 次 |
| 最近记录: |