1

Rectanglesxミリ秒ごとに異なる色(多次元配列に格納されている)を表示したいWPFキャンバスがあります。

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

windowのContentRenderedイベントを使用してみることができます。

于 2013-01-12T13:32:13.913 に答える