【发布时间】:2015-04-25 19:21:08
【问题描述】:
我已经在使用backgroundworker.RunAsyn() 在单独的线程上运行我的代码。但是,我遇到了在上一行完成之前代码迭代到下一行的部分。我应该创建一个单独的backgroundworker 来处理它吗?或者我应该使用Application.Wait() 或Thread.Sleep() 我不确定要延迟多少时间,我宁愿让我的程序不坐在那里等待额外的不必要的时间,所以我不确定要走哪条路。这是麻烦制造者的sn-p。
public Form_Main()
{
InitializeComponent();
backgroundworker1.WorkerReportsProgress = true;
backgroundworker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1_ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
private void btnOpenRefreshSave_Click()
{
backgroundWorker1_RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Excel.Application exApp;
Excel._Workbook exBook;
Excel._Worksheet exSheet;
exBook = (Excel._Workbook)(exApp.WOrkbooks.Open("C:\\Book1.xlsx"));
exSheet = (Excel._Worksheet)(exBook.ActiveSheet);
//This is the line of code that often times takes a while
exBook.RefreshAll();
//end of trouble line
exBook.SaveAs("C:\\Updated_Book1.xlsx");
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
【问题讨论】:
-
“代码在上一行完成之前迭代到下一行”是什么意思?
-
@SriramSakthivel 它将在刷新操作有时间完成之前保存工作簿。
-
RefreshAll 是同步的,因此您无需做任何其他事情...
-
@AdrianoRepetti 文档says something different。我对文档的看法是对的吗?
标签: c# multithreading backgroundworker