C# BackgroundWorker的RunWorkerAsync()方法不';t触发Do_工作事件
我使用backgroundworker设置了一个ProgressBar,以便在下载文件时显示进度。但是BackgroundWorker的RunWorkerAsync()方法不会触发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 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事件,该事件似乎未被触发
<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-查看我提供的帮助您解决问题的文章链接谢谢您的时间:):我没有发现张贴的问题和您提供的答案在逻辑上有任何区别。