【发布时间】:2015-05-29 04:26:49
【问题描述】:
我采用了来自 MSDN 的以下示例,用于在 WinRT 应用的列表视图中增量加载缩略图:
https://code.msdn.microsoft.com/windowsapps/Data-Binding-7b1d67b5
我想删除下面的“await Task.Delay(10)”行。 当我这样做时,我会收到一条警告,指出该方法缺少等待运算符。
protected async override Task<IList<object>> LoadMoreItemsOverrideAsync(System.Threading.CancellationToken c, uint count)
{
uint toGenerate = System.Math.Min(count, _maxCount - _count);
// Wait for work
await Task.Delay(10);
// This code simply generates
var values = from j in Enumerable.Range((int)_count, (int)toGenerate)
select (object)_generator(j);
_count += toGenerate;
return values.ToArray();
}
我尝试重写方法并将整个方法包装在一个任务中,如下所示:
protected async override Task<IList<object>> LoadMoreItemsOverrideAsync(System.Threading.CancellationToken c, uint count)
{
return await Task.Run(() => {
uint toGenerate = System.Math.Min(count, _maxCount - _count);
// This code simply generates
var values = from j in Enumerable.Range((int)_count, (int)toGenerate)
select (object)_generator(j);
_count += toGenerate;
return values.ToList<object>();
});
}
但是,我遇到了线程异常:
异常:应用程序调用了为不同线程编组的接口。 (来自 HRESULT 的异常:0x8001010E (RPC_E_WRONG_THREAD))
看来我需要在 UI 线程上运行它?但我无权访问 Dispatcher。
寻找一些建议
【问题讨论】:
-
Control上没有Invoke(delegate)方法吗?
标签: c# winrt-xaml winrt-async