如何每秒更改表单元素的值?

时间:2015-09-23 14:40:31

标签: c# winforms windows-forms-designer

我有扩展ProgressBar的类,它应该释放一个简单的计时器。

    public partial class TimerBar: ProgressBar
    {
        public TimerBar()
        {
            InitializeComponent();
            Value = 100; 
        }
        ...
        public void Start()
        {
            int x = 100/Timer; // procent per second

            for (i = Value; i > 0; i--) {
               Value -= x;
            }
        }
     }

如何在Value -= x之前设置延迟1秒? (它不应该阻止其他元素)

2 个答案:

答案 0 :(得分:2)

您可以使用windorms Timer类来引发一个事件,以便在您的班级中每秒调用一个方法。这不会阻止线程。您将不得不重新编写逻辑,而不是使用for循环,但它应该能够提供您所需的。

答案 1 :(得分:1)

如果你想在代码中保持循环(因此不能使用the other answer中建议的Timer方法),你可以使用as {/ 1 /等Task.Delay

public async void Start()
{
    int x = 100/Timer; // percent per second

    for (i = Value; i > 0; i--) {
       Value -= x;
       await Task.Delay(1000);
    }
}