-3

私はwinformが初めてで、BackgroundWorkerの使用方法がわかりません。

基本的に私がやろうとしていることはこれです:

「インポート」と「終了」の2つのボタンを持つ1つのフォームがあります。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倍

4

1 に答える 1

1

このメソッドを呼び出す必要がありますRunWorkerAsync

backgroundWorker1.RunWorkerAsync();

を介してargumentハンドラーに一部を渡したい場合は、次の 2 番目のオーバーロードを試してください。DoWorkDoWorkEventArgsRunWorkerAsync

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