我在尝试加载图像并使用System.Threading.Task
显示它时遇到问题我的代码如下
Task DownloadTask { get; set; }
public string Instrument { get; set; }
public PriceChartViewController(string Instrument) {
this.Instrument = Instrument;
DownloadTask = Task.Factory.StartNew(() => { });
}
private void LoadChart(ChartType chartType) {
NSData data = new NSData();
DownloadTask = DownloadTask.ContinueWith(prevTask => {
try {
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
NSUrl nsUrl = new NSUrl(chartType.Uri(Instrument));
data = NSData.FromUrl(nsUrl);
}
finally {
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
}
});
DownloadTask = DownloadTask.ContinueWith(t => {
UIImage image = new UIImage(data);
chartImageView = new UIImageView(image);
chartImageView.ContentScaleFactor = 2f;
View.AddSubview(chartImageView);
this.Title = chartType.Title;
}, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext());
}
第二次继续似乎没有被调用?
最初,我的代码在没有后台处理的情况下看起来如下所示,并且完美运行。
private void oldLoadChart(ChartType chartType) {
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
NSUrl nsUrl = new NSUrl(chartType.Uri(Instrument));
NSData data = NSData.FromUrl(nsUrl);
UIImage image = new UIImage(data);
chartImageView = new UIImageView(image);
chartImageView.ContentScaleFactor = 2f;
View.AddSubview(chartImageView);
this.Title = chartType.Title;
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
}
有谁知道我做错了什么?
答案 0 :(得分:2)
线程的第一部分崩溃了,这就是为什么它永远不会到达第二部分:
你在呼叫UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
来自非UI线程。设置网络活动指示符是UI操作,并且只能在主线程上执行。你必须把它包装在InvokeOnMainThread()
中。
如果你添加一个try-catch,你会看到异常。
答案 1 :(得分:0)
在catch
之前添加finally
。也许你只是有一个例外,所以工作流程不再进一步。