У меня есть холст 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.
Очевидно, что прямоугольники должны быть созданы в потоке графического интерфейса, но если я создам Timer
для изменения цветов, он будет в другом потоке.
Могу ли я создать многомерный массив значений и привязать значения к цветам в массиве Rectangle, чтобы иметь доступ к ним из другого потока? И если я это сделаю, как я скажу потоку GUI перерисовать?
Может быть, было бы проще иметь кнопку, которую пользователь нажимает первой, чтобы этого не происходило в конструкторе?
EDIT:
DispatcherTimer
работал отлично. Почему у MS есть отдельный класс для этого, мне не понятно.
Вот источник, для которого я использовал его.