1

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

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 有一个单独的课程,这超出了我的范围。

在此处输入图像描述

是我使用它的来源。

4

2 回答 2

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]));
    }
于 2013-01-12T13:36:31.483 回答
0

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

于 2013-01-12T13:32:13.913 回答