我遇到的这样的问题,我一个按钮事件中调用了另外一个类中的方法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(); //这里开始去下载
}
}
跪求大神!帮忙看下如何解决!
自己解决