【发布时间】:2012-02-29 19:26:29
【问题描述】:
我在 C# .Net 4 中有一个 backgroundworker_dowork() 事件,它调用三个方法,我希望它们同步执行。
鉴于我的限制,方法 3 必须在方法 2 之后执行,方法 2 必须在方法 1 之后执行。
但是,在BackgroundWorker 中,所有三个方法都是异步执行的。
我该如何更改?
private void bgwLoading_DoWork(object sender, DoWorkEventArgs e)
{
ArrayList a = (ArrayList)e.Argument;
string[] fileNames = (string[])a[0];
bool isLoad = (bool)a[1];
this.loadMultiImages(fileNames, isLoad);
}
private void loadMultiImages(string[] fileNames, bool isLoad)
{
// I want to execute the following codes sequentially.
Bitmap newBtmap = saveJpeg();
this.SafeInvoke(d => d.imageList.Images.Add(newBtmap));
}
由于SafeInvoke() 比saveJpeg() 花费的时间更少,它在saveJpeg() 完成之前开始执行,从而改变了我想要的执行流程。
【问题讨论】:
-
非常具有误导性的标题。线程优先级是一个完全不同的概念。
-
如果要同步执行,为什么要使用异步执行?
-
你在做什么让 saveJpeg 返回调用 SafeInvoke 而没有“完成”?
标签: multithreading c#-4.0 backgroundworker