【问题标题】:ProgressBar control parallel with MethodProgressBar 控件与 Method 并行
【发布时间】:2020-04-13 19:03:00
【问题描述】:

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

ProgressBar 的时间必须与方法的时间并行运行。当我调用该方法时,ProgressBar start; 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;
}

有什么建议可以让它发挥作用吗?

【问题讨论】:

  • 您能否提供有关 myMethod 的信息?它依赖于 myMethod 的很多内部实现

标签: c# xamarin xamarin.forms


【解决方案1】:

如果没有可靠地重现问题的良好Minimal, Reproducible Example,就不可能确定问题出在哪里。但是,可以做出有根据的猜测。

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多