WPF: у меня проблема с рисованием чего-либо на холсте с помощью потока - PullRequest
0 голосов
/ 19 ноября 2010

Я пытаюсь рисовать что-то на холсте каждую 1 секунду. Затем я создаю поток, чтобы вызвать метод для рисования после сна 1 секунды.Проблема заключается в вызове объекта Canvas для рисования.Программа сообщает мне сообщение об ошибке

Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им.получить доступ к Canvas в теме для рисования?

Ответы [ 4 ]

3 голосов
/ 19 ноября 2010

Посмотрите на класс DispatcherTimer . Он предназначен именно для этого сценария, как видно из примеров MSDN.

2 голосов
/ 19 ноября 2010

Вы можете позвонить

this.Dispatcher.Invoke((Action)(() =>
                                     {
                                        Canvas.SetLeft(tick, 700);
                                        Canvas.SetTop(tick, 30);
                                     }));

(я предполагаю, что this - это некоторый элемент управления пользовательского интерфейса. Если нет, вы можете использовать Application.Current.Dispatcher вместо этого). Он выполнит ваши операции холста в потоке пользовательского интерфейса.

1 голос
/ 19 ноября 2010

Я попробую DispatcherTimer, это работает.

DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(1);
        timer.Tick += tickThread;
        timer.Start();
    }
    private void tickThread(object sender, EventArgs e)
    {
        try
        {
            tick.thisTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);
            double TickPixel = GetPixel(ClassTimeline.Width, startTime, endTime, tick.thisTime);
            Canvas.SetLeft(tick, TickPixel);
            Canvas.SetTop(tick, 30);
        }catch(Exception ex){
            MessageBox.Show("Exception tickThread : "+ex.Message);
        }
    }
0 голосов
/ 19 ноября 2010

Вы не можете получить доступ к графическим объектам из потока, отличного от созданного им.

...