gpt4 book ai didi

c# - 使用 Xamarin 更新 UI

转载 作者:行者123 更新时间:2023-11-30 13:54:12 25 4
gpt4 key购买 nike

我在使用 Xamarin 更新 UI 时遇到困难。目标是制作响应式(Reactive) UI,以便用户知道应用程序正在思考。以下是我的尝试。

尝试 1

private void BeginProcess(string fileName)
{
Device.BeginInvokeOnMainThread(() => {
iContent.Text = "UI Successfully updated.";
});

Device.BeginInvokeOnMainThread(() => {
ProccessFolder testMethod = new ProccessFolder.Initialize(fileName);
});
}

尝试 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);
});
}

尝试 3

private void BeginProcess(string fileName)
{
Device.BeginInvokeOnMainThread(() => {
iContent.Text = "UI Successfully updated.";
});

Task.Delay(5000);

Device.BeginInvokeOnMainThread(() => {
ProccessFolder testMethod = new ProccessFolder.Initialize(fileName);
});
}

不幸的是,这些都不起作用。如果我将 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";
});
}
})
}

有时您可以使用以下方法复制这种效果:

NSRunLoop.Current.RunUntil(1000);

允许 UI 在您调用“BeginInvokeOnMainThread”委托(delegate)时跟上。

关于c# - 使用 Xamarin 更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com