2010-11-18 49 views
0

我结合于类的获得仅使用绑定源属性(例如)数据绑定仅获取属性。 UI更新。的BindingSource

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

。而绑定到它的控件并不反映只获取属性的更改。 我以为我可以实现INotifyPropertyChanged接口,但似乎只能在setter 上工作(因为您需要在该属性更改时手动提升PropertyChanged事件)。
现在我有愚蠢的计时器运行和轮询的变化。我可以做些什么来自动化控制(或绑定源)以动态反映属性值?

回答

1

继续执行INotifyPropertyChanged的,但是当你的线程启动引发事件和死亡 即:

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

怎么样的情况,如果线程被中止? – Nickolodeon 2010-11-18 11:47:37

+0

Thread.Abort在目标线程上引发一个ThreadAbortException。我编辑了解决这个问题的答案。请参阅http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx – 2010-11-18 12:09:34