首页 > 解决方案 > ProgressBar 控件与 Method 并行

问题描述

我试图ProgressBar在方法开始时运行 a ,并在方法结束时停止栏。

的时间ProgressBar必须与方法的时间并行运行。当我调用该方法时,ProgressBar开始; when the method ends theProgressBar 停止。

我努力了:

progressBar1.Minimum = 0;
progressBar1.Maximum = 200;
int i = 0;
var myVar = var.empty;
While(myVar.Lenght =! 0)
{
   myVar = myMethod();
   i++;
   progressBar1.Value = i;
}

有什么建议让它工作吗?

标签: c#xamarinxamarin.forms

解决方案


如果没有可靠地重现问题的良好的最小、可重现的示例,就不可能确定问题是什么。但是,可以做出有根据的猜测。

在 Xamarin 中,与所有其他主流 GUI API 一样,您有一个拥有所有 UI 的线程。只有这个线程刷新屏幕,只要那个线程一直忙于做其他事情,它就不能这样做。视觉元素属性的更改不会显示给用户。

您发布的代码很可能正在该主 UI 线程上执行。在您从包含代码的任何方法返回之前,无法更新 UI。你自己的代码占据了线程的注意力,UI无法更新。

如果没有代码示例,就无法提供有关如何修复它的具体建议。但是,一般方法是将耗时的代码移到后台线程,然后使用某种机制从那里定期更新进度条。

请注意,与其他主流 GUI API 一样,您的代码也需要仅在该主 UI 线程上与 UI 相关对象交互。此类 API 通常提供特殊方法,Xamarin 也不例外。您可以使用的方法之一是InvokeOnMainThread(). 您可以查看有关如何使用它的更多详细信息。

同时,这里是另一个 Stack Overflow Q&A,它说明了使用 a 的基本概念ProgressBar
How to create a progress bar with rounded bar in iOS using Xamarin.Forms

该示例都显示了使用后台线程执行长时间运行工作的一种方法(在这种情况下,通过调用模拟Task.Delay()),以及如何使用InvokeOnMainThread()来更新ProgressBar自身。


推荐阅读