C# OnPropertyChanged事件处理程序
我正在为Windows Phone编写一个应用程序。我有一个可变结果,用于存储服务器在Windows Phone应用程序发出请求后发送的响应 我有一个名为request的类,它生成请求并接收响应。我想检查结果变量何时更改为,以便对我的应用程序进行进一步处理 以下是请求类:C# OnPropertyChanged事件处理程序,c#,events,httpwebrequest,httpwebresponse,C#,Events,Httpwebrequest,Httpwebresponse,我正在为Windows Phone编写一个应用程序。我有一个可变结果,用于存储服务器在Windows Phone应用程序发出请求后发送的响应 我有一个名为request的类,它生成请求并接收响应。我想检查结果变量何时更改为,以便对我的应用程序进行进一步处理 以下是请求类: namespace PhoneApp1 { public class Request: INotifyPropertyChanged { public string data;
namespace PhoneApp1
{
public class Request: INotifyPropertyChanged
{
public string data;
public string result = "test";
public Request()
{
}
public string Result
{
get
{
return result;
}
set
{
if (this.result == value)
{
return;
}
this.result = value;
OnPropertyChanged("Result");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public void doRequest(string parameters, string URL)
{
data = parameters;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
public void GetRequestStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
Stream postStream = myRequest.EndGetRequestStream(callbackResult);
byte[] byteArray = Encoding.UTF8.GetBytes(data);
postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();
myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
}
public void GetResponsetStreamCallback(IAsyncResult callbackResult)
{
HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream());
result = httpWebStreamReader.ReadToEnd();
}
}
}
如您所见,我在结果变量上实现了OnPropertyChanged事件处理程序
下面是我创建类实例以执行请求的代码:
**//Log-in Button Event Handler**
Request req = new Request();
req.PropertyChanged += new PropertyChangedEventHandler(req_PropertyChanged);
req.doRequest("function=LogIn&username=" + username + "&password=" + password, "http://localhost:4000/Handler.ashx");
}
}
}**//End of Log-in Button Event Handler**
public void req_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
string result = ((Request)sender).Result;
if (result.Equals("True") || result.Equals("true"))
{
PhoneApplicationService.Current.State["Username"] = username;
NavigationService.Navigate(new Uri("/Authenticated.xaml", UriKind.Relative));
}
else
{
MessageBox.Show("The log-in details are invalid!");
}
}
由于某种原因,当我单击“登录”按钮时,什么也没有发生。没有消息框,没有重定向,甚至没有异常。我不知道我做错了什么。请帮帮我。为了解决这个问题,我浪费了这两个小时
即使我知道结果变量正在更改,为什么req\u PropertyChanged代码没有执行?
PropertyChanged
不是魔术。只有在明确引发事件时,它才会激发 您确实在
结果设置程序中引发了该事件,但您没有调用它。
当您编写result=httpWebStreamReader.ReadToEnd()时代码>,您可以直接设置字段,而无需运行属性设置程序。
因此,事件永远不会触发。那么如何重写该行?对不起,我对这些概念很陌生。好的,我解决了那个部分。我刚刚准确地使用了Result=httpWebStreamReader.ReadToEnd()。您需要设置属性。