0

我有一个验证用户的 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
4

2 回答 2

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 线程上完成。

于 2013-02-23T17:46:52.247 回答
0

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

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

于 2013-02-23T17:57:11.543 回答