首页 新闻 会员 周边 捐助

win8 中遇到一个棘手的问题,跪拜高手!

0
[已关闭问题] 关闭于 2014-06-04 09:30

我遇到的这样的问题,我一个按钮事件中调用了另外一个类中的方法B,B方法中有异步获取本地数据的方法,也有发生HTTP命令的方法,但现在出现,B方法中的所有方法,流程都没走完,按钮事件的线程就完成了(也就走完了代码域),等按钮事件代码域全部完成之后,又回到了b方法中的异步方法继续执行,执行中会出现这样的错误提示“system.Exception类型的未经处理异常在mscorlib.dll中发生.    winRt信息:应用程序调用一个已为另一线程整理的接口”   这个链接下有伪代码进行描述问题http://social.msdn.microsoft.com/Forums/zh-CN/dd24face-b204-406b-a65a-522a323d1dc1/win8-#dd24face-b204-406b-a65a-522a323d1dc1   跪求大神相助!

问题补充:

我一个下载任务,在下载按钮事件里去调用另外一个专门的下载方法,为了主线程和下载分开,我在下载方法里特意开了个线程去做下载,但还没到下载就报错了(到发送http协议获取文件就出错了)错误信息为“winrt:应用程序调用一个已为另一线程整理的。接口代码如下:private async void btnPaste_Tapped(object sender, TappedRoutedEventArgs e)
{
           await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                //将当前任务放入到上传下载的界面
                SetCollapsed();
                LeftDownloadListView.Visibility = Visibility.Visible;
                DownloadGrid.Visibility = Visibility.Visible;
                DownloadList.Visibility = Visibility.Visible;
                DownloadList.ItemsSource = curentCopyTaskInfo;

                App.transferFileParserHandle.AddCopyTaskFileArray(curentCopyTaskInfo);
                App.transferFileParserHandle.BeginCoppyTaskFileHandleProcess();       //开始执行上传下载
            });
}

public void BeginCoppyTaskFileHandleProcess()
        {
            if (!isBeginWorkThread)
            {
                isBeginWorkThread = true;

                //开始下载处理流程
                BeginThreadToHandleCopyTaskCommand();
            }
        }

  //启动线程开始工作
        public void BeginThreadToHandleCopyTaskCommand()
        {
            //判断是否发送命令
            //wait to do this function

            Task task = Task.Run(() =>
            {
                BeginCopyTaskHandle();
            });
        }
public void BeginCopyTaskHandle()
{
             //设置状态为正在传输
            curCoppingTaskFile.status = (int)CopyTaskInfo.CopyTaskStatus.CopyStatusCopping;

            //修改数据库
            //wait to do this function
            App.allDataBaseMethod.UpdataToCopyTaskInfo(curCoppingTaskFile.taskID, curCoppingTaskFile.status);
            curTransferHandle.BeginThreadToTransferFile(curCoppingTaskFile);
}

public async void BeginThreadToTransferFile(CopyTaskInfo copyTaskInfo)
        {
            curTransferFile = copyTaskInfo;
            copyTaskTransferSpeed = 0;
            curTaskCmdStatus = (int)CopyTaskCmdStatus.CopyTaskCmdStatusNone;

            //发送获取磁盘剩余容量
            JudgeDiskSizeAccordingToTaskType();
            await App.asyncManualRestEvent.WaitAsync();
            App.asyncManualRestEvent.Reset();

            //判断磁盘容量是否足够此次操作
            if (JudgeDiskSize())
            {
                //容量足够  --  //启动线程 判断原文件是否存在
                BeginTransferFileHandlePropcess();
            }
            else
            {
                //通知磁盘容量不足,结束此次操作

            }
        }

public async void BeginTransferFileHandlePropcess()
        {
            bool isExitFile = await IsExitOriginSourceFile();    //执行到这里,报上面对错误,这里是去发送http协议,发送完就报错了,发送到时候btnPaste_Tapped事件已执行完了。
           if (!isExitFile)
            {
                //源文件不存在   -- 发送错误提示
                App.transferFileParserHandle.isBeginWorkThread = false;
                WriteLog.TraceWriterLogMessage("源文件不存在, CopyTaskTransferHandle类中");
                MessageDialog mg = new MessageDialog("信息提示");
                mg.Content = "源文件不存在";
                await mg.ShowAsync();
                return;
            }

            bool isExitDistFile = await IsExitDirestSourceFile();
            if (isExitDistFile)
            {
                //目的文件存在 --提示是覆盖还是继续追加还是取消

                     StartTask();     //这里开始去下载

             }
            else
            {
                //没有相同的目的文件,直接操作
                StartTask();    //这里开始去下载
            }
        }


跪求大神!帮忙看下如何解决!

zihaobiao的主页 zihaobiao | 初学一级 | 园豆:200
提问于:2013-08-05 12:35
< >
分享
所有回答(1)
1

自己解决

zihaobiao | 园豆:200 (初学一级) | 2014-06-04 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册