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