今天看一位博友,自己写了点程序但出问题了,再次求助,自己解决不了。看下面这个程序的关键代码
public class ViewModel:INotifyPropertyChanged
{
string state;
public string State
{
set
{
state = value;
Raise("State");
}
get
{
return state;
}
}
string data;
public string Data
{
set
{
data = value;
Raise("Data");
}
get
{
return data;
}
}
ICommand buttomCommand;
public ICommand Button
{
get
{
buttomCommand = new DeleCommand((o) =>
{
NetTask net = new NetTask();
net.OnStateChanged += new NetTask.Dele(net_OnStateChanged);
net.OnStateChanged += new NetTask.Dele(Method);///这行多此一举,是为了加深事件的理解而写
net.StartNetTask(o);
}
);
return buttomCommand;
}
}
//public ICommand Button
//{
// get
// {
// buttomCommand = new DeleCommand((o) =>
// {
// State = "state";
// Data = "data";
// }
// );
// return buttomCommand;
// }
//}
void net_OnStateChanged(NetTask sender, EvevtClass args)
{
State= args.State + args.Time;
}
void Method(NetTask sender, EvevtClass args)
{
Data= args.Data;
}
public event PropertyChangedEventHandler PropertyChanged;
void Raise(string name)
{
if (PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
重要的是Button这个命令,一调用这个命令就会报错,是调用PropertyChanged事件时报的错。如果把现的的命令代码注释了,改用下面注释的那段命令代码,就好了。但是这是为什么?
说明一下在调用net.StartNetTask(o)这个方法是,这个方法内部调用了
OnStateChanged 事件。
有没有人知道这是为什么,过会我把项目的源友上传,有兴趣的可以下载下来看看!
这是源代码下载地址,高手帮忙呀,谢谢了。
http://files.cnblogs.com/learnWindowsPhone/PhoneApp49.zip
刚才我想起我以前做的新浪微博时,明白错误出在哪里了,因为我在调用那个事件里在网络的异步操作,所以出错的代码改成如下的例子就行了
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
State = args.State + args.Time;
}
);
前面出错的原因是ui线程阻塞,用这个方法就不阻塞了。
关注。。。
明白错误出在哪里了,因为我在调用那个事件里在网络的异步操作,所以出错的代码改成如下的例子就行了
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
State = args.State + args.Time;
}
);
前面出错的原因是ui线程阻塞,用这个方法就不阻塞了