silverlight调用WCF产生的错误

cpt_adt2010 2011-02-24 10:25:01
声明一个WCF客户端代理
 MyServiceClient.Service1Client clientWCF = new Service1Client();

在按钮事件中写调用方法,判断登录用户名和密码
        #region 登录用户验证
void btnlogin_Click(object sender, RoutedEventArgs e)
{
string ls_loginname = txtloginname.Text;
string ls_loginpass = txtloginpass.Text;
clientWCF.checkloginCompleted += new EventHandler<checkloginCompletedEventArgs>(clientWCF_checkloginCompleted);
clientWCF.checkloginAsync(ls_loginname, ls_loginpass);
}

        void clientWCF_checkloginCompleted(object sender, checkloginCompletedEventArgs e)
{
ObservableCollection<user_info> returnlist = e.Result;
if (returnlist.Count > 0)
{
MessageBox.Show("成功");
}
else
{
MessageBox.Show("用户名或密码错误");
txtloginname.Text = "";
txtloginpass.Text = "";
return;
}
}

每次我点按钮后,如果密码输入错误,会弹出对话框("用户名或密码错误")。现在的问题是,再我多次输入错误后,每次点登录按钮,都会弹出多次MessageBox.Show("用户名或密码错误"),求解决办法
...全文
91 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
海涵德 2011-02-26
  • 打赏
  • 举报
回复
多次输入当然每次都返回登陆错误提示,是程序代码的必然结果。
另外代码这样写似乎合理些,与你的程序结果关系不大。
public partial class MainPage : UserControl
{

void clientWCF_checkloginCompleted(object sender, checkloginCompletedEventArgs e)
{
ObservableCollection<user_info> returnlist = e.Result;
if (returnlist.Count > 0)
{
MessageBox.Show("成功");
}
else
{
MessageBox.Show("用户名或密码错误");
txtloginname.Text = "";
txtloginpass.Text = "";
return;
}
}

public MainPage()
{
InitializeComponent();

clientWCF.checkloginCompleted += new EventHandler<checkloginCompletedEventArgs>(clientWCF_checkloginCompleted);

}

void btnlogin_Click(object sender, RoutedEventArgs e)
{
string ls_loginname = txtloginname.Text;
string ls_loginpass = txtloginpass.Text;
clientWCF.checkloginAsync(ls_loginname, ls_loginpass);
}
}

Sunpire 2011-02-25
  • 打赏
  • 举报
回复
很简单,楼主没按照游戏规则的办事

void btnlogin_Click(object sender, RoutedEventArgs e)
{
clientWCF.checkloginCompleted += new EventHandler<checkloginCompletedEventArgs>(clientWCF_checkloginCompleted);
}

每次 btnlogin_Click 时重新订阅了 checkloginCompleted 事件,当然点击越多次,响应就越多次了。

规则: 1.在实例化client时,订阅各种异步事件,这一块代码写成一个方法,如InitClient()
2. 在异步调用事件前,判断client的状态,如果client未初始化或已Closed,重新调用InitClient()
3. 在 clientWCF_checkloginCompleted() 响应方法中,要对 e.Error 进行判断,以确定是否发生了异常
枝柳飞扬 2011-02-25
  • 打赏
  • 举报
回复
Wcf是异步执行的,是不是 楼主点的太快, 前面的执行还没有执行完。
lcp147572931 2011-02-25
  • 打赏
  • 举报
回复
LZ什么意思啊 密码错了 肯定弹出提示呀
Carpathia 2011-02-25
  • 打赏
  • 举报
回复
//开始登陆
clientWCF.checkloginCompleted += clientWCF_checkloginCompleted;
//登陆完成
lientWCF.checkloginCompleted -= clientWCF_checkloginCompleted;
无趣 2011-02-25
  • 打赏
  • 举报
回复
对,多次订阅问题,我也犯过类似错误。类似问题请楼主注意:childWindow关闭后,诸如timer之类的东西都要disable,否则timer还在定时触发。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧