使用在后台运行的Web服务登录

时间:2013-02-23 17:45:22

标签: c# multithreading web-services asynchronous login

我有一个验证用户的WebService。但在您收到验证之前,Windows会指责程序没有响应。我试过线程,异步并没有成功。当他连接到网络服务时,屏幕上会显示连接消息。

label1.Text = "Connecting";
Service.Service1 ws = new Service.Service1(); //start WebService
bool login = ws.login(username, password); //Validate login
if (login) {... //If login is true

2 个答案:

答案 0 :(得分:1)

  

我尝试过线程,

您还没有真正展示过您尝试过的内容,因此很难说出您的代码可能出现了什么问题。如果这是桌面应用程序,您可以考虑使用BackgroundWorker

例如:

private void LoginButtonClick(object sender, EventArgs e)
{
    label1.Text = "Connecting";
    var bw = new BackgroundWorker();
    bw.DoWork += Login;
    bw.RunWorkerCompleted += LoginCompleted;
    bw.RunWorkerAsync();
}

private void Login(object sender, DoWorkEventArgs e)
{
    Service.Service1 ws = new Service.Service1();
    bool success = = ws.login(username, password);
    e.Result = success;
}

private LoginCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    bool success = (bool)e.Result;
    if (success)
    {
        label1.Text = "You have successfully logged in";
    }
    else
    {
        label1.Text = "Wrong username and password";
    }
}

在桌面应用程序中使用后台线程时也要小心。您应该确保永远不会访问此后台线程中的UI控件。这应该始终在主UI线程上完成。

答案 1 :(得分:0)

Service1.Service是否有“Beginlogin”/“Endlogin”方法?通常,当您添加对WSDL的引用时,也会自动为您创建异步版本....

如果是,则使用此方法;它比旋转单独的线程要干净得多。有关如何使用它们的一个很好的示例,请参阅http://www.codeproject.com/Articles/2476/Asynchronous-Communication-with-NET-WebServices