如何在winform c#中使用BackgroundWorker

时间:2013-10-10 16:44:31

标签: c# winforms backgroundworker

我是winform的新手,我无法弄清楚如何使用BackgroundWorker。

基本上我要做的就是:

我有一个带有2个按钮的表单:“导入”和“退出”。当调用ImporButton_Click时,它所做的就是创建一个HttpListener并监听给定的URL。 ExitButton_Click关闭表单。

问题是,当我按“导入”时,表单会卡住并且处于“无响应”状态,直到某人正在呼叫监听器并将其释放。

我试图了解BackgroundWorker如何帮助我克服“卡住”问题。我不明白如何调用backgroundWorker1_DoWork方法

到目前为止,这是我的代码:

//Program.cs 
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new ConfigurationForm());
    }
}

//ConfigurationForm.cs
public partial class ConfigurationForm : Form
{
    public ConfigurationForm()
    {
        InitializeComponent();
        UrlTextBox.Text = @"enter URL here";
    }

    private void ImporButton_Click(object sender, EventArgs e)
    {
        try
        {
            String urlToListen = UrlTextBox.Text;

            //Invoke MyListener 
            MyListener.StartListen(urlToListen); //assume this is implemented
        }
        catch (Exception exception)
        {
            string errorMsg = String.Format("An exception occured = {0}", exception);
            MessageBox.Show(errorMsg);
        }
    }

    private void ExitButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }


    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    }
}
那么,现在呢?我如何调用backgroundWorker1_DoWork ???

对任何可以提供帮助的人来说都是10倍

1 个答案:

答案 0 :(得分:1)

您需要调用此方法RunWorkerAsync

backgroundWorker1.RunWorkerAsync();

如果您想通过argument将一些DoWork传递到处理程序DoWorkEventArgs,请尝试RunWorkerAsync的第二次重载:

backgroundWorker1.RunWorkerAsync(yourArgument);