Какой смысл использовать раскадровку в качестве таймера? - PullRequest
3 голосов
/ 05 июля 2010

Я видел несколько примеров кода, где StoryBoard используется в качестве таймера, например:

void Update()
    {
        if (_sb == null)
        {
            _sb = new Storyboard();
            _sb.Completed += _sb_Completed;
            _sb.Duration = new Duration(TimeSpan.FromSeconds(1));
        }
        if (_sb_completed)
        {
            _sb.Begin();
            _sb_completed = false;
        }
    }
    void _sb_Completed(object sender, EventArgs e)
    {
        PerformUpdate();
        _sb_completed = true;
    }

Storyboard в какой-то момент лучше, чем Timer?Почему люди используют его?

PS Вопрос связан с Silverlight и / или WPF.

Ответы [ 2 ]

3 голосов
/ 06 июля 2010

Раскадровка, как DispatcherTimer, выполняется в потоке пользовательского интерфейса.Так что в любом случае вы никогда не увидите исключение между потоками.

Вы можете использовать раскадровку поверх DispatcherTimer, потому что раскадровка имеет более высокий приоритет.

Но я не уверен в самом объекте Timerпоскольку я никогда не использовал это в пользу раскадровки или DispatcherTimer.

2 голосов
/ 05 июля 2010

Использование Storyboard отличается от использования стандартного System.Threading.Timer. Storybroad работает в основном потоке, следовательно, Completed даже может манипулировать элементами пользовательского интерфейса, не получая исключений между потоками. Стандартный обратный вызов Timer не выполняется в потоке пользовательского интерфейса, и поэтому ему потребуется дополнительная помощь для управления элементами пользовательского интерфейса.

Однако, как отмечает Марк, если все, что действительно необходимо, это задержка, то DispatcherTimer будет более интуитивным выбором. Разница с DispatcherTimer заключается в том, что он предназначен для регулярного вызова события Tick, тогда как Storyboard будет вызывать Completed не более одного раза для каждого вызова Begin. DispatcherTimer можно использовать таким образом, вызывая его метод Stop в первом событии Tick.

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