Winforms:保持Winforms应用程序解锁的最佳方法?

Winforms:保持Winforms应用程序解锁的最佳方法?,winforms,Winforms,我有一个winforms应用程序,它在web服务请求期间被锁定 我曾尝试使用doEvents来解锁应用程序,但其响应速度仍然不够 如何绕过此锁定,使应用程序始终响应?在后台线程中执行web服务请求。小心对Application.DoEvents()调用过多。最好的方法就是在另一个线程上执行IO工作,可能是通过BackgroundWorker,或WebClient的异步方法 看吧。在与UI控件(线程关联)对话时,确保使用Invoke;完整示例: using System; using System

我有一个winforms应用程序,它在web服务请求期间被锁定

我曾尝试使用doEvents来解锁应用程序,但其响应速度仍然不够


如何绕过此锁定,使应用程序始终响应?

在后台线程中执行web服务请求。小心对Application.DoEvents()调用过多。

最好的方法就是在另一个线程上执行IO工作,可能是通过
BackgroundWorker
,或
WebClient
的异步方法

看吧。在与UI控件(线程关联)对话时,确保使用
Invoke
;完整示例:

using System;
using System.Net;
using System.Windows.Forms;
class MyForm : Form
{
    Button btn;
    TextBox txt;
    WebClient client;
    public MyForm()
    {
        btn = new Button();
        btn.Text = "Download";
        txt = new TextBox();
        txt.Multiline = true;
        txt.Dock = DockStyle.Right;
        Controls.Add(btn);
        Controls.Add(txt);
        btn.Click += new EventHandler(btn_Click);
        client = new WebClient();
        client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
    }

    void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        Invoke((MethodInvoker)delegate
        {
            if (e.Cancelled) txt.Text = "Cancelled";
            else if (e.Error != null) txt.Text = e.Error.Message;
            else txt.Text = e.Result;
        });
    }

    void btn_Click(object sender, EventArgs e)
    {
        client.DownloadStringAsync(new Uri("http://google.com"));
    }
}
static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new MyForm());
    }
}

跨线程操作无效:控件“listView_mylist”是从其上创建的线程以外的线程访问的。调用(新方法调用程序(委托{listView_mylist.Items[pos]。子项[5]。Text=“成功(未配置证书)”;});为下一个家伙添加评论-谁需要解决方案