我的自定義事件處理程序在執行完登錄後自動執行。自定義事件處理程序正在重複自己
通過重複自身,我的意思是在第一次發生事件時,處理程序只執行一次。但是,當事件再次發生時,處理程序執行2次!當事件第三次發生時,處理程序執行3次,依此類推。
這是我的代碼。任何我忽略的東西?
訂閱事件
SignIn signIn = new SignIn();
signIn.Login_Complete += new SignIn.EventHandler(recieveLoginResult);
pb.IsVisible = true;
signIn.Login(control.username.Text, control.password.Password);
事件
class SignIn
{
public event EventHandler Login_Complete;
public event EventHandler Logout_Complete;
public event EventHandler Signup_Complete;
public delegate void EventHandler(Object sender, String message);
...
public void Login(String username, String password)
{
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("user", username);
parameters.Add("pass", password);
PostClient client = new PostClient(parameters);
client.DownloadStringCompleted += (senders, ex) =>
{
if (ex.Error == null)
{
//Process the result...
Login_Complete(this, ex.Result);
}
else
{
Login_Complete(this, "An error occurred. The details of the error: " + ex.Error);
}
};
client.DownloadStringAsync(new Uri("(SOME URL HERE)", UriKind.Absolute));
}
事件處理
private void recieveLoginResult(object sender, String loginResult)
{
SignIn signin = new SignIn();
signin.Login_Complete -= recieveLoginResult;
//Check if the result is numeric or not.
bool textIsNumeric = true;
try
{
int.Parse(loginResult);
}
catch
{
textIsNumeric = false;
}
if (textIsNumeric == true)
{
//Logged in successfully.
popup.IsOpen = false;
loginName.Text = control.username.Text;
sessionID = int.Parse(loginResult);
}
else
{
//Did not log in successfully.
MessageBox.Show(loginResult, "Error", MessageBoxButton.OK);
}
pb.IsVisible = false;
}
謝謝你。我這樣做,也阻止了我的按鈕單擊事件處理程序重複,直到它完成(使用布爾變量isLoggingIn)。現在,問題解決了! [現在] – kdh
@AndrewKim,你可能有其他問題,通常不需要這樣做。我的意思是刪除事件處理程序,然後將其添加回來。 – seshuk