2009-04-08 8 views
0

J'obtiens cette exceptionproblème Threading dans WPF

System.InvalidOperationException a été par code unhandled utilisateur Message = "Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread est propriétaire il."

chaque fois que je lance le code suivant

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; 
     } 
} 

gars une solution ... Je mal Wann en sors :(

Répondre

3

Utilisation DispatcherTimer à la place:

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

Chaque fois que vous modifiez contrôle Windows, vous devez le faire sur la thread d'interface utilisateur (celui qui a créé les contrôles).

Voir this question pour beaucoup de détails.

0

Pour être bref, vous devez utiliser la méthode Dispatcher.Invoke pour mettre à jour les éléments de l'interface utilisateur.