1

このBackgroundWorkerを動作させることができません。ここからm3rLinEzの例を使用しています

問題は、GUIが応答せず、パーセンテージが更新されないことです。

マスターページを使用していてasync="true"、コンテンツページのヘッダーに設定しました。
私は何か他のものが欠けていますか?

ASPXコード:

<asp:Button ID="btnGo" runat="server" Text="Go" OnClick="btnClick_Go" />&nbsp;
<asp:Label runat="server" id="textUpdate" text="0%" />

コードビハインド

protected void btnClick_Go(object sender, EventArgs e)
{    
    BackgroundWorker bw = new BackgroundWorker();

    // this allows our worker to report progress during work
    bw.WorkerReportsProgress = true;

    // what to do in the background thread
    bw.DoWork += new DoWorkEventHandler(
    delegate(object o, DoWorkEventArgs args)
    {
        BackgroundWorker b = o as BackgroundWorker;

        // do some simple processing for 10 seconds
        for (int i = 1; i <= 10; i++)
        {
            // report the progress in percent
            b.ReportProgress(i * 10);
            Thread.Sleep(1000);
        }

    });

    // what to do when progress changed (update the progress bar for example)
    bw.ProgressChanged += new ProgressChangedEventHandler(
    delegate(object o, ProgressChangedEventArgs args)
    {
        textUpdate.Text = string.Format("{0}%", args.ProgressPercentage);
    });

    // what to do when worker completes its task (notify the user)
    bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
    delegate(object o, RunWorkerCompletedEventArgs args)
    {
        lblSuccess.Visible = true;
    });

    bw.RunWorkerAsync();
}
4

1 に答える 1

2

BackgroundWorker通常、クライアント側のUI(WPF、WinFormsなど)で使用されます。

コードでは、応答がクライアントに返送された後にUIを更新しようとしています。クライアントからサーバーへの後での要求なしで、それがどのように機能することを期待しますか?

Webアプリケーションに関しては、UIを更新し続けるためにAJAXを使用する必要があります。そのAJAXを管理しやすくするための優れた方法があるかもしれませんがBackgroundWorker、サーバー側で使用するだけではなく、すべてが機能することを期待できます。

于 2013-01-30T10:18:03.837 に答える