在WPF中定时刷新GUI

时间:2013-01-12 13:21:32

标签: c# wpf timer rectangles dispatchertimer

我有一个WPF画布,我希望每x毫秒显示不同的颜色Rectangles(存储在多维数组中)。

Random rnd = new Random();

foreach (var i in Enumerable.Repeat(1, 100))
{
    _rectGrid[rnd.Next(0, 30), rnd.Next(0, 30)].Fill = new SolidColorBrush(Colors.Blue);
    Thread.Sleep( 100 );
    // refresh somehow here?
}

这有效,但我没有看到它实时更新,因为它在MainWindow构造函数中。

显然,必须在GUI线程中创建矩形,但是如果我创建一个Timer来改变它在另一个线程中的颜色。

我可以创建一个多维数组值并将值绑定到Rectangle数组中的颜色,以便我可以从另一个线程访问它们吗?如果我这样做,我该如何告诉GUI线程重绘?

也许用户点击一个按钮会更简单,这样在构造函数中就不会发生这种情况?

EDIT:

DispatcherTimer效果很好。为什么MS有一个单独的课程是我的。

enter image description here

Here是我用它的来源。

2 个答案:

答案 0 :(得分:4)

您可以像这样使用DispatcherTimer

    public MainWindow()
    {
        InitializeComponent();

        DispatcherTimer t = new DispatcherTimer();
        t.Tick += t_Tick;
        t.Interval = new TimeSpan(0, 0, 0, 0, 300);
        t.Start();
    }
    Random r = new Random();
    void t_Tick(object sender, EventArgs e)
    {
        byte[] rnd = new byte[4];
        r.NextBytes(rnd);
        this.Background = new SolidColorBrush(Color.FromArgb(rnd[0], rnd[1], rnd[2], rnd[3]));
    }

答案 1 :(得分:0)

您可以尝试使用窗口的ContentRendered事件。