-3

我是winform的新手,我不知道如何使用BackgroundWorker。

基本上我想要做的是:

我有 1 个带有 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 ???

10x 给任何可以提供帮助的人

4

1 回答 1

1

你需要调用这个方法RunWorkerAsync

backgroundWorker1.RunWorkerAsync();

如果您想通过 将一些传递给argument处理程序,请尝试第二个重载:DoWorkDoWorkEventArgsRunWorkerAsync

backgroundWorker1.RunWorkerAsync(yourArgument);
于 2013-10-10T16:48:09.163 回答