调度程序内部的方法为IAsyncAction.Completed处理程序调用两次

时间:2013-05-17 09:35:42

标签: c# asynchronous

问题描述

IAsyncAction myCheck = null;
myCheck = ThreadPool.RunAsync(
    (IAsyncAction source) =>
    {
        MyFirstTask();
    });

myCheck.Completed = new AsyncActionCompletedHandler(
    (IAsyncAction TaskCompletionSource, AsyncStatus status) =>
    {
        System.Windows.Deployment.Current.Dispatcher.BeginInvoke(
            () =>
            {
                MySecondTask();
            });
    });

MyFirstTask():我收到了文件列表,我将使用LongListMultiSelector向他们展示屏幕。

MySecondTask()中:我定义了一个属性FileCount,它返回从MyFirstTask()获得的文件计数。基于属性FileCount和文件计数,如果文件计数为零(0),我在屏幕上显示“无项目”文本,否则我将显示所有项目。

问题

MyFirstTask()完全获取所有文件之前,MySecondTask()执行两次,因此在第一次执行时,我们得到文件计数值零(0)。由于这个原因,我的UI更新了“没有项目”文本...但是在1-2秒之后,MySecondTask()再次触发FileCount属性并且文件数量正确,我可以看到所有文件屏幕和文本“没有项目”将消失。

请注意:只有当存在大量文件时才会出现此问题,因此对于较少的文件,此问题不存在......(因此,我强烈怀疑这是由于线程之间的系统化问题。)

有什么建议吗?

0 个答案:

没有答案