Событие тика обычного таймера фактически запускается в потоке, в котором был создан таймер, поэтому в событии тика, чтобы получить доступ к чему-либо через пользовательский интерфейс, вам нужно будет выполнить dispatcher.begininvoke, как указано ниже.
RegularTimer_Tick(object sender, EventArgs e)
{
txtBox1.Text = "count" + i.ToString();
// error can not access
// txtBox1.Text property outside dispatcher thread...
// instead you have to write...
Dispatcher.BeginInvoke( (Action)delegate(){
txtBox1.Text = "count " + i.ToString();
});
}
В случае с Dispatcher Timer вы можете получить доступ к элементам пользовательского интерфейса, не вызывая begin или invoke, как показано ниже ...
DispatcherTimer_Tick(object sender, EventArgs e)
{
txtBox1.Text = "Count " + i.ToString();
// no error here..
}
DispatcherTimer по сравнению с обычным таймером обеспечивает удобство доступа к объектам пользовательского интерфейса.