我正在使用Windows Phone 7.1应用程序并希望多行代码运行10秒,如果在10秒内成功,则继续,如果不成功,请停止代码并显示消息。 问题是,我的代码不是循环 - 手机试图从服务器获取数据(如果互联网连接速度慢,可能需要太长时间)。
if (DeviceNetworkInformation.IsNetworkAvailable)
{
// start timer here for 10s
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += loginHandler;
webClient.DownloadStringAsync(new Uri(string.Format(url + "?loginas=" + login + "&pass=" + pwd)));
// if 10s passed, stop code above and display MessageBox
}
答案 0 :(得分:3)
您可以使用以下内容:
HttpClient client = new HttpClient();
var cts = new CancellationTokenSource();
cts.CancelAfter(10000);
try
{
var response = await client.GetAsync(new Uri(string.Format(url +
"?loginas=" + login + "&pass=" + pwd)), cts.Token);
var result = await response.Content.ReadAsStringAsync();
// work with result
}
catch(TaskCanceledException)
{
// error/timeout handling
}
您需要以下NuGet包:
答案 1 :(得分:2)
将该段代码作为方法,使该方法单独运行。 启动计时器,经过10秒后,检查第一个线程的状态。 如果它已经获取了他应该使用的所有内容,请使用它,否则杀死线程,清理你需要清理的任何内容并返回错误信息。