Проблема с потоками в Windows 7 Phone - PullRequest
1 голос
/ 26 октября 2010

Привет, я работаю в Windows 7 приложение для телефона, используя Silverlight.У меня есть следующие методы в одном из моих классов пользовательского интерфейса, GameScreen.xaml.Я вызываю метод startTimer в конструкторе GameScreen.Проблема в том, что когда вызывается метод updateTime и выполняется строка

timeLabel.Text = "Time left:  00 : " + time;

, программа создает исключение UnauthorizedAccessException для переменной времени.

private void startTimer()
    {
        timeThread = new Thread(new ThreadStart(startThread));
        timeThread.Start();
    }

    public void startThread()
    {
        while (timeLeft > 0)
        {
            Thread.Sleep(1000);
            updateTime();                
            if (timePassed % 10 == 0)
            {
                findNextBGResource();
                changeBackgroundScene();
            }
        }            
    }


    private void updateTime()
    {
        // update the view
        String time = timeLeft.ToString();
        if (timeLeft < 10)
        {
            time = "0" + time;
        }
        if (doUpdateTime && timeLeft >= 0)
        {
            timeLabel.Text = "Time left:  00 : " + time;
        }
    }

Может кто-нибудь помочь мне в этом вопросе?1007 *

С наилучшими пожеланиями ...

Ответы [ 2 ]

4 голосов
/ 26 октября 2010

По сути, вы не можете изменить пользовательский интерфейс из чего-либо, кроме потока диспетчера. Два варианта:

  • Используйте Dispatcher.BeginInvoke для выполнения кода, изменяющего пользовательский интерфейс, в потоке диспетчера
  • Используйте DispatcherTimer вместо того, чтобы начинать новый поток и переходить в спящий режим - таким образом, «тик» уже будет происходить в потоке пользовательского интерфейса.
0 голосов
/ 26 октября 2010

Вы уверены, что это переменная time, а не timeLabel? Обычно вы не можете редактировать пользовательский интерфейс из других потоков, кроме того, который обрабатывает пользовательский интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...