我正在尝试在UWP应用程序中使用VirtualizingObservableCollection。它是一个PCL库,所以我希望我可以直接链接它并使用它。我从来没有做过WPF,也不是UWP和XAML的新手。
该集合的部分初始化是以下代码:
if ( !VirtualizationManager.IsInitialized )
{
//set the VirtualizationManager’s UIThreadExcecuteAction. In this case
//we’re using Dispatcher.Invoke to give the VirtualizationManager access
//to the dispatcher thread, and using a DispatcherTimer to run the background
//operations the VirtualizationManager needs to run to reclaim pages and manage memory.
VirtualizationManager.Instance.UIThreadExcecuteAction = a => Dispatcher.Invoke( a );
new DispatcherTimer( TimeSpan.FromSeconds( 1 ),
DispatcherPriority.Background,
delegate
{
VirtualizationManager.Instance.ProcessActions();
},
Dispatcher ).Start();
}
我的第一个问题是它到底在做什么?
我知道我们正在使用lambda表达式,并且(a)“转到”Dispatcher.Invoke(a),但是(a)DispatchTimer? UIThreadExectuteAction是否成为Dispatch.Invoke调用?是否传递给Dispatch.Invoke我们设置的是什么?
我的第二个问题是,在UWP中,Dispatcher.Invoke不存在,我可以用await dispatcher.RunAsync(...)代替。我想我可以以某种方式将Dispatcher.RunAsyc包装在一个Task中,但是UIThreadExcecuteAction是一个Action。
是否可以将其翻译为在Windows Universal App中使用?