C# BackgroundWorker的RunWorkerAsync()方法不';t触发Do_工作事件

C# BackgroundWorker的RunWorkerAsync()方法不';t触发Do_工作事件,c#,wpf,backgroundworker,C#,Wpf,Backgroundworker,我使用backgroundworker设置了一个ProgressBar,以便在下载文件时显示进度。但是BackgroundWorker的RunWorkerAsync()方法不会触发Do_工作事件 /**********窗口加载***********/ BackgroundWorker backgroundWorker1; private void MainWindow_Load(object sender, RoutedEventArgs e) { bac

我使用backgroundworker设置了一个ProgressBar,以便在下载文件时显示进度。但是BackgroundWorker的RunWorkerAsync()方法不会触发Do_工作事件

/**********窗口加载***********/

        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);
    }
        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. 
    }
/******点击按钮*******/

void Button_Click(object sender, RoutedEventArgs e)
    {
            backgroundWorker1.RunWorkerAsync();
    }
/****事件*********/

        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);
    }
        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的新手。非常感谢您的帮助。

您的代码看起来很好,代码没有任何更改。请尝试解决以下问题

  • 检查您的点击事件是否正常…按钮点击是否正常
  • 在click事件中放置断点,并在click事件起作用时进行调试

  • 我建议你可以看一下这篇文章,这篇文章和你做的事情是一样的。。可能是您发现缺少了什么。

    我设置了一个示例项目,并准确地使用了您的代码,它在编程方面没有任何问题,在我这方面工作得非常好

    确保您已将按钮订阅到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(); 
            }
    
    
    私人后台人员(u后台人员);
    公共主窗口()
    {
    初始化组件();
    _backgroundWorker=新的backgroundWorker();
    _backgroundWorker.DoWork+=新的DoworkerVenthandler(backgroundWorker_DoWork);
    _backgroundWorker.ProgressChanged+=新的ProgressChangedEventHandler(backgroundWorker\u ProgressChanged);
    _backgroundWorker.RunWorkerCompleted+=backgroundWorker\u RunWorkerCompleted;
    _backgroundWorker.WorkerReportsProgress=true;
    DataContext=this;
    }
    私有void backgroundWorker_RunWorkerCompleted(对象发送方,runworkercompletedeventarge)
    {
    var eee=e.结果;
    }
    private void backgroundWorker_ProgressChanged(对象发送方,ProgressChangedEventArgs e)
    {
    var Progress=e.ProgressPercentage;
    }
    私有void backgroundWorker_DoWork(对象发送方,DoWorkEventArgs e)
    {
    int p=10;
    对于(int-index=0;index
    您也订阅了点击活动吗?对不起,我找不到您。我已经在WPF窗口中放置了一个按钮和进度条。贴在网上的答案确实描述了我的意思……我已经试过了。单击事件可以正常工作。我需要设置任何属性吗?@user3065219-不需要设置任何属性that@user3065219-查看我提供的帮助您解决问题的文章链接谢谢您的时间:):我没有发现张贴的问题和您提供的答案在逻辑上有任何区别。