簡體   English   中英

BackgroundWorker的RunWorkerAsync()方法不會觸發Do_Work事件

[英]RunWorkerAsync() method of BackgroundWorker doesn't trigger Do_Work event

我已經使用backgroundworker設置了一個ProgressBar來顯示下載文件時的進度。 但是BackgroundWorker的RunWorkerAsync()方法不會觸發Do_Work事件。

/ ********** Window_Load *********** /

        BackgroundWorker backgroundWorker1;
    private void MainWindow_Load(object sender, RoutedEventArgs e)
    {
    backgroundWorker1=new BackgroundWorker();
    backgroundWorker1.WorkerReportsProgress=true;
    backgroundWorker1.DoWork +=new DoWorkEventHandler(backgroundWorker1_DoWork);
    backgroundWorker1.ProgressChanged +=new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
    backgroundWorker1.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
    }

/ ****** Button_Click ******* /

void Button_Click(object sender, RoutedEventArgs e)
    {
            backgroundWorker1.RunWorkerAsync();
    }

/ ****事件********* /

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        ProgressBar1.Value = e.ProgressPercentage;
    }
    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        MessageBox.Show("File download complete");
    }


private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    //Code to download a file and setting progressbar time. 
    }

我是WPF的新手。 任何幫助表示贊賞。

您的代碼看起來不錯,代碼沒有任何更改。嘗試找出以下內容

  1. 檢查您的點擊事件是否正常...按鈕點擊是否正常
  2. 將斷點放在click事件中,並在click事件正常工作時對其進行調試

我建議您看一下這篇文章:使用BackgroundWorker進行多線程操作與您正在做的事情相同。

我設置了一個示例項目,並精確地使用了您的代碼,並且在程序上沒有任何錯誤,並且對我而言非常完美。

確保您已將按鈕訂閱到click事件中,該事件似乎並未被觸發

<Button Content="Button" HorizontalAlignment="Left" Margin="153,42,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>

試試這個例子,

<Button Content="Button" HorizontalAlignment="Left" Margin="165,58,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>

 private BackgroundWorker _backgroundWorker;
        public MainWindow()
        {
            InitializeComponent();
            _backgroundWorker = new BackgroundWorker();
            _backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
            _backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
            _backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;
            _backgroundWorker.WorkerReportsProgress = true;
            DataContext = this;


        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            var eee = e.Result;
        }

        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            var progrss = e.ProgressPercentage;
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            int p=10;
            for (int index = 0; index < p; index++)
            {
                object param = "something";
                Thread.Sleep(100);
                _backgroundWorker.ReportProgress(p, param);
                Thread.Sleep(1000);
                if (index == 10)
                {
                    break;
                } 
            } 

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            _backgroundWorker.RunWorkerAsync(); 
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM