2010-11-18 9 views
0

Je lié à la classe obtenir des propriétés que (par exemple)liaison de données pour obtenir uniquement les propriétés. Mise à jour de l'interface utilisateur BindingSource

public bool IsRunning 
    { 
    get 
     { 
     return myThread!=null && myThread.IsAlive; 
     } 
    } 

en utilisant la source de liaison. Et les contrôles liés ne reflètent pas les changements sur les propriétés get only. Je pensais pouvoir implémenter l'interface INotifyPropertyChanged, mais cela ne semble fonctionner que sur le setter (car vous devez lever l'événement PropertyChanged manuellement lorsque cette propriété change).
En ce moment j'ai un minuteur stupide en cours d'exécution et d'interrogation pour les changements. Que puis-je faire pour automatiser les contrôles (ou la source de liaison d'ailleurs) pour refléter dynamiquement les valeurs des propriétés?

Répondre

1

INotifyPropertyChanged continuer d'appliquer, mais augmenter l'événement lorsque votre fil commence et meurt -à-dire:

bool _isRunning; 
bool IsRunning{ 
get{return _isRunning;} 
set{ 
    _isRunning=value; 
    Dispatcher.BeginInvoke(new Action(()=>PropertyChanged(this,new PropertyChangedEventArgs("IsRunning")))); 
} 

void foo(){ 
myThread=new Thread(doWork).Start(); 
} 

void doWork(){ 
    IsRunning=true; 
    try{ 
    // stuff 
    }finally{ 
    IsRunning=false; 
    } 
} 
+0

Qu'en est-il si la situation fil est abandonnée? – Nickolodeon

+0

Thread.Abort déclenche une exception ThreadAbortException sur le thread cible. J'ai édité la réponse pour prendre soin de cela. Voir http://msdn.microsoft.com/fr-fr/library/system.threading.threadabortexception.aspx –