我有一个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有一个单独的课程是我的。
Here是我用它的来源。
答案 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事件。