【发布时间】:2013-03-06 12:12:28
【问题描述】:
我有带有 MVVM 应用程序的 WPF。 ViewModel 和 View 是连接的。 View 中的控件绑定到 ViewModel,ViewModel 继承 INotifyChanged。 ViewModel 中的简单控件更新工作正常。
我想创建一些包含一些信息字段的信息类。接下来,我想创建自己的线程,将 Info 类中的字段映射到 ViewModel 中更新 View 的字段。 Info 类的对象将用作 ViewModel 中调用的函数的 arg。
private int someControl;
public SomeControl {
get{return someControl;}
set
{
someControl = value;
OnPropChanged("SomeControl");
}
private InfoClass info = new InfoClass();
Thread thread = null;
public ViewModel()
{
Thread thread = new Thread(new ThreadStart(update));
thread.IsBackground = true;
thread.start();
someLongFunction(info);
}
private void update()
{
SomeControl = info.someField;
thread.sleep(1000);
update();
}
我应该添加或更改什么来定期获取更新?现在,只有在 someLongFunction 结束其工作时才会更新。
【问题讨论】:
-
我没有完全理解你...你想做什么?您想定期更新您的视图吗?
-
确实,我想要那个功能:)
-
递归调用你的更新方法最终会创建一个stackoverflow!好吧,您可以在
System.Threading.Timer中定义计时器,或者您必须使用线程同步原语(Mutex和Event)。这会在someLongFunction运行时发生吗? -
我没有得到stackoverflow,但也许我的应用程序运行时间太短了。我必须补充一点,如果我写 SomeControl += 1 而不是 SomeControl = info.someField;它工作正常。
-
我没有说你有 stackoverflow,但你最终会明白的,一遍又一遍地递归调用你的方法。
标签: c# wpf multithreading mvvm