【问题标题】:delay ring between two font style changing两种字体样式更改之间的延迟环
【发布时间】:2010-04-06 18:10:48
【问题描述】:

我想在短时间内更改控件的字体样式。例如 2 秒。我喜欢:

label1.Font = new Font(label1.Font, label1.Font.Style | FontStyle.Bold);
for(int i=0,i<4000000,i++);
label1.Font = new Font(label1.Font, label1.Font.Style | FontStyle.Regular);

但它不起作用。问题是什么?

【问题讨论】:

  • @Hesam Qodsi:+1 初学者问题,但很有用。

标签: c# .net user-interface


【解决方案1】:

这个扩展功能怎么样?

public static class LabelExtensions
{
    public static Label BlinkText(this Label label, int duration)
    {
        Timer timer = new Timer();

        timer.Interval = duration;
        timer.Tick += (sender, e) =>
            {
                timer.Stop();
                label.Font = new Font(label.Font, label.Font.Style ^ FontStyle.Bold);
            };

        label.Font = new Font(label.Font, label.Font.Style | FontStyle.Bold);
        timer.Start();

        return label;
    }
}

在编写此扩展程序时,我想到了另一个有趣的问题:
Does it lead to a memory leak?

【讨论】:

    【解决方案2】:

    正如 Jens 所说,Sleep 比您的“忙循环”要好得多。

    a) 该循环可能会被编译器优化掉
    b) 在忙于等待时,表单无法自行更新以显示第一个字体。

    在等待之前,您可能还需要一个.Refresh(),以强制表单(或只是标签)重新绘制自身。

    【讨论】:

      【解决方案3】:

      这不是等待两秒钟的方法。请改用System.Threading.Thread.Sleep(2000)

      至于您的问题:当您说:“它不起作用”时,我认为字体保持粗体而不是恢复为常规字体。改用这个:

      FontStyle style = label1.Font.Style;
      label1.Font = new Font(label1.Font, style | FontStyle.Bold); 
      System.Threading.Thread.Sleep(2000)
      label1.Font = new Font(label1.Font, style); 
      

      要了解您的版本无法运行的原因,请查看MSDN documentation of the Enum type.

      请注意,这会将您的用户界面冻结两秒钟。你应该尽量避免这种情况。看看 Timer 类。

      【讨论】:

      • Thread.Sleep() 函数会将表单冻结太久。这是个坏主意。
      【解决方案4】:

      在这里我回答了类似的问题。

      .NET: Best way to execute a lambda on UI thread after a delay?

      我更喜欢使用委托和BeginInvoke() 函数。

      带有Timer的变体更容易理解,并且不需要从另一个线程访问控制。

      【讨论】:

        猜你喜欢
        • 2021-11-24
        • 2020-03-15
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多