所以我有一个非常简单的软件来调用多图像列表
并以( Next
)+( Previous
)格式显示它们:
它的作品非常适合我,但当我按住按下
var getImage = Directory.EnumerateFiles(DirName, Ext,
SearchOption.TopDirectoryOnly);
在此内:
Dispatcher.Invoke(DispatcherPriority.Background,
new Action(() => /*### the Images output Here ###*/ ));
但仍然会出现同样的问题
如何使其正常工作?
如果还有其他办法,我会很高兴知道它。
答案 0 :(得分:2)
Dispatcher.Invoke
安排在UI线程上执行的委托。您不希望在UI线程上执行任何可能长时间运行的代码,因为这会冻结您的应用程序。
如果你想在后台线程上调用Directory.EnumerateFiles
,你可以开始一项任务:
Task.Factory.StartNew(()=>
{
//get the files on a background thread...
return Directory.EnumerateFiles(DirName, Ext, SearchOption.TopDirectoryOnly);
}).ContinueWith(task =>
{
//this code runs back on the UI thread
IEnumerable<string> theFiles = task.Result; //...
}, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
请注意,您无法访问后台线程上的任何UI控件,因此您应该只在后台线程上执行长时间运行的工作,然后如果您想要结果,可以使用ContinueWith
方法返回UI线程,例如设置ItemsControl的ItemsSource
属性或将Visibility
的{{1}}属性设置回ProgressBar
或其他内容。