我正在使用C#和Windows Forms.我有一个正常的进度条在该程序中正常工作,但现在我有另一个操作,其中持续时间不容易计算.我想显示一个进度条,但不知道启动/停止滚动选框的最佳方法.我希望有一些简单的东西,如设置选取框速度,然后有一个start()和stop(),但它看起来并不那么简单.我必须在后台运行一个空循环吗?我该如何做到最好?谢谢
我意识到关于动画和进度条的SO还有其他问题,但它们似乎围绕着摆脱进度条上绘制的动画,即.旅行的亮点.
我想要做的是摆脱我设置进度条的新值时使用的动画.我现在遇到的问题是正在运行的操作完成,然后进度条在操作完成后继续增加到最大位置.
换句话说,如果我将进度条的Value属性设置为50,我希望它立即前进到中途位置(如果max是100),而不是像现在那样慢慢地将进度条建立到该位置.
如果确实有一个关于SO的问题已经处理过这个问题,那么关闭就像重复一样,我会高兴地删除它,但我找不到任何问题.
这是我发现的那个:禁用WinForms ProgressBar动画,它处理动画的高亮,这不是我所说的.
这是一个简单的LINQPad演示,它显示了这个问题:
void Main()
{
using (var fm = new Form())
{
var bt = new Button
{
Text = "Start",
Location = new Point(8, 8),
Parent = fm,
};
var pb = new ProgressBar
{
Top = bt.Top + bt.Height + 8,
Width = fm.ClientRectangle.Width - 16,
Left = 8,
Parent = fm
};
bt.Click += (s, e) =>
{
bt.Enabled = false;
Thread t = …Run Code Online (Sandbox Code Playgroud) 可能重复:
禁用WinForms ProgressBar动画
我正在使用一个进度条来检测来自我们收音机的一些数据,并且它的"闪烁"是不可接受的.此外,慢速更新速率数据每次都会动画化为该值,而不是立即移动.此行为无法提供与仪器相同的视觉体验.我意识到进度条不是为了这个目的,而是它在我的工具箱中.
使用此链接中的"pause"命令不允许我继续更新该值,因为它已暂停.更改回正常,更新值然后再次暂停似乎不是一个好的解决方案.此外,默认情况下暂停变为黄色,所以除了以上所有之外,我还需要将颜色变回绿色.
有人可以建议如何关闭此动画或建议第三方'仪器工具箱'?
我有一个简单的Windows窗体应用程序,只有一个按钮和一个进度条.
然后我有这个代码:
private async void buttonStart_Click(object sender, EventArgs e)
{
progressBar.Minimum = 0;
progressBar.Maximum = 5;
progressBar.Step = 1;
progressBar.Value = 0;
await ConvertFiles();
MessageBox.Show("ok");
}
private async Task ConvertFiles()
{
await Task.Run(() =>
{
for (int i = 1; i <= 5; i++)
{
System.Threading.Thread.Sleep(1000);
Invoke(new Action(() => progressBar.PerformStep()));
}
});
}
Run Code Online (Sandbox Code Playgroud)
该await ConvertFiles();收益太早,确定消息框似乎已经在80%左右的进展.
我究竟做错了什么?