[英]The BackgroundWorker RunWorkerAsync method does not trigger DoWork();
[英]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的新手。 任何幫助表示贊賞。
您的代碼看起來不錯,代碼沒有任何更改。嘗試找出以下內容
我建議您看一下這篇文章:使用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.