【问题标题】:Is there a way to prioritize an object on a form?有没有办法在表单上确定对象的优先级?
【发布时间】:2020-05-15 08:57:27
【问题描述】:

我有一个表格,角落里有一个计时器,它重复数到 10。下面的“下一步”按钮触发用户每隔几秒钟读取一次。当我点击“下一步”按钮时,UI 在获取数据时冻结,其中包括计时器正在写入的文本框。因此,用户每次按下按钮时看到的可见数字都会冻结 2 秒。有没有办法让文本框每秒更新一次?

这里是滴答事件:

private void timer_Counter_Tick(object sender, EventArgs e)
{
    if (Ticker == 9)
    {
        Ticker = 0;
    }
    else { Ticker++; }
    txtbx_Timer.Text = Ticker.ToString();
}

这是定时器的启动:

timer_Counter = new System.Windows.Forms.Timer();
timer_Counter.Tick += new EventHandler(timer_Counter_Tick);
timer_Counter.Interval = 1000;
timer_Counter.Start();

【问题讨论】:

  • 您需要向我们展示按钮的 Click 事件处理程序的代码。您可能还想搜索多线程和异步编程等关键字。问题不在于文本框没有“优先”。只是当您单击按钮时,正在执行一些阻塞整个 UI 线程的工作。有几种方法可以解决这个问题,具体取决于您想要做什么。
  • 您在按钮单击事件中的代码正在 UI 线程上运行。如果不将代码放在按钮点击到另一个线程中,您将无法保持表单的反应性。

标签: c# forms user-interface timer


【解决方案1】:

@ahmed 和@Franck,在您的 cmets 之后,我发现了 backgroundworker,我将繁重的处理放在了另一个线程上,这似乎已经解决了这个问题。谢谢!

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多