2009-04-08 3 views
0

Я получаю это исключениепроблема Threading в WPF

System.InvalidOperationException был необработанных с помощью кода пользователя Message = « вызывающего потока не может получить доступ к этому объекта, потому что другой поток владеет его.»

всякий раз, когда я запускаю следующий код

public partial class MainScreen : Window 
{ 
     Timer trm; 

     public MainScreen() 
     { 
      InitializeComponent(); 

      trm = new Timer(1000); 
      trm.AutoReset = true; 
      trm.Start(); 
      trm.Elapsed += new ElapsedEventHandler(trm_Elapsed); 
     } 

     void trm_Elapsed(object sender, ElapsedEventArgs e) 
     { 
      lblTime.Content = System.DateTime.Now; 
     } 
} 

ребят любое решение ... Я плохо Wann выйти из него :(

ответ

3

Использование DispatcherTimer вместо:

public partial class MainScreen : Window{ 
DispatcherTimer tmr;  
public MainScreen() { 
InitializeComponent(); 
tmr = new DispatcherTimer(); 
tmr.Tick += new EventHandler(tmr_Tick); 
tmr.Start();  
} 
void tmr_Tick(object sender, EventArgs e) { 
    lblTime.Content = System.DateTime.Now; 
} 
} 
0

В любое время вы измените управления Windows, вы должны сделать это на UI нить (тот, который создал элементы управления).

this question См для многих деталей.

0

Одним словом, вы должны использовать метод Dispatcher.Invoke для обновления элементов пользовательского интерфейса.