Windows Phone 용 응용 프로그램을 작성하고 있습니다. Windows Phone 앱의 요청 후 서버가 보낸 응답을 저장하는 변수 결과가 있습니다.OnPropertyChanged 이벤트 처리기
나는 요청을 생성하고 응답을 수신하는 요청 요청 클래스를 가지고 있습니다. 결과가 일 때 변수가 변경되어 응용 프로그램에서 처리 할 수 있는지 확인하고 싶습니다. 당신이 볼 수 있듯이
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!");
}
}
어떤 이유로 또는 다른 경우 : 여기
내가 요청을 수행하는 클래스의 인스턴스를 생성하고있는 곳에서 코드입니다. 메시지 상자 없음, 리디렉션 없음, 예외 없음. 내가 뭘 잘못하고 있는지 알 수 없다. 도와주세요. 지난 2 시간 동안이 문제를 해결하기 위해 낭비했습니다.결과가 변수가 변경된다는 것을 알고 있더라도 req_PropertyChanged 코드가 실행되지 않는 이유는 무엇입니까?
그래서 어떻게 행을 다시 쓸 수 있습니까? 미안하지만 나는이 개념들에 대해 아주 새롭다. –
Result.set을 사용했지만 오류가 발생했습니다. –
나는 그 부분을 해결했다. 방금 Result = httpWebStreamReader.ReadToEnd()를 사용했습니다. –