c# - ProgressBar 控件与 Method 并行
问题描述
我试图ProgressBar
在方法开始时运行 a ,并在方法结束时停止栏。
的时间ProgressBar
必须与方法的时间并行运行。当我调用该方法时,ProgressBar
开始; when the method ends the
ProgressBar 停止。
我努力了:
progressBar1.Minimum = 0;
progressBar1.Maximum = 200;
int i = 0;
var myVar = var.empty;
While(myVar.Lenght =! 0)
{
myVar = myMethod();
i++;
progressBar1.Value = i;
}
有什么建议让它工作吗?
解决方案
如果没有可靠地重现问题的良好的最小、可重现的示例,就不可能确定问题是什么。但是,可以做出有根据的猜测。
在 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
自身。
推荐阅读
- r - 列表列的元素与其他 data.frame 中的行匹配
- python - 使用 np.random.choice 创建从 1 到 5 的 10.000 个随机数列表的问题
- python - 在 Python 中的 URL 列表中选择前 3 个仅限域的 URL
- kotlin - 作为启动上下文提供时未执行 CoroutineExceptionHandler
- c# - 异常处理时捕获块中的 System.Web.Http.HttpResponseException
- xamarin - Xamarin.Forms Java.exe 以代码 1 退出
- typescript - 在 Typescript 中扩展导出变量的接口
- python - 所有名称服务器都无法响应 UDP 端口 53 谷歌云函数 python 3.7 atlas mongodb
- go - 从 router.HandleFunc 调用返回多个中间件函数
- python-3.x - Python with Pandas--无法从 URL 读取 CSV 文件