这两个事件需要在装载登录界面时被添加,代码如下:
// 添加登录成功事件
im.messenger.Nameserver.SignedIn += new EventHandler(SignedIn);
// 添加登录失败事件
im.messenger.Nameserver.AuthenticationError +=
new HandlerExceptionEventHandler(HandlerExceptionEvent);
登录成功后的处理代码如下:
private void SignedIn(object sender, EventArgs e)
{
// 设置当前成功登录的用户状态为在线
im.messenger.Owner.Status = PresenceStatus.Online;
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (ThreadStart)delegate
{
MessageBox.Show("登录成功!", "信息", MessageBoxButton.OK, MessageBoxImage.Information);
if (main == null)
{
this.Hide();
main = new Main(im);
// 保存成功登录的MSN帐号
XElement element = new XElement("config", new XElement("account",
txtAccount.Text));
element.Save("config.xml");
// 显示程序的主界面
main.ShowDialog();
}
});
}
由于dotmsn2.0使用了异步的方式来调用这些事件方法,因此,在事件方法中必须使用BeginInvoke方法来执行访问界面控件的代码,如上面的代码所示。
处理登录失败的代码如下:
public void HandlerExceptionEvent(object sender, ExceptionEventArgs e)
{
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (ThreadStart)delegate
{
lblStatus.Content = "";
MessageBox.Show(e.Exception.Message, "错误", MessageBoxButton.OK,
MessageBoxImage.Error);
});
}
|