我有一个要执行的方法列表,其中一些是异步方法,需要一段时间才能完成。但是,我需要在程序进入下一个任务之前完成这些任务,因为此时正在执行旧数据。
有关如何执行此操作的任何提示?这些是我的任务。我需要前三个任务才能在最后两个执行之前完成处理。
public MainPage()
{
this.InitializeComponent();
getTemp();
data = new initialData();
SetLiveTile();
liveTile();
}
PS:这适用于Windows 8 metro app
getTemp()的代码如下。我的问题是,在执行其余方法之前,我需要此方法的值,但在获取值之前,程序继续执行SetLiveTile和liveTile方法。
public async void getTemp()
{
var weatherService = new WeatherService.GlobalWeatherSoapClient();
var result = await weatherService.GetWeatherAsync("", "Malta");
XmlDocument doc = new XmlDocument();
doc.LoadXml(result);
int pos = doc.InnerText.IndexOf(" F");
string rem = doc.InnerText.Remove(0, pos + 4);
string weather = rem.Substring(0, 2);
temp = int.Parse(weather);
}
PS:temp是一个全局变量
答案 0 :(得分:1)
我不知道你的哪些任务是在不同的线程上运行的,但理论上当你有一个线程,并且你想在完成任务后做某事时,你使用thread.join( )方法(很像Java)。
答案 1 :(得分:0)
我真的不知道Windows应用商店应用中的事件,但是在Windows窗体中,您可以在加载时添加异步事件处理程序,例如 - 假设我们有这3个方法需要一些时间才能完成:
private Task DoWork() {
return Task.Delay(3000);
}
private Task DoSomeMoreWork() {
return Task.Delay(5000);
}
private Task DoEvenMoreWork() {
return Task.Delay(7000);
}
private async void MyForm_Load(object sender, EventArgs e) {
// this will take 7 seconds it will execute all the methods at the same time and will resume when all are completed
await Task.WhenAll(DoWork(), DoSomeMoreWork(), DoEvenMoreWork());
// will be here when all the methods are done executing
}
我希望这至少可以给你一个想法。
答案 2 :(得分:0)
您可能还想查看Barrier类:http://msdn.microsoft.com/en-us/library/dd537615(v=vs.110).aspx