检测到 DisconectedContext 问题

3
我需要帮助解决以下错误:
“Transition into COM context 0x465608 for this RuntimeCallableWrapper failed with the following error: System call failed. (Exception from HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED)).” 这通常是因为创建该RuntimeCallableWrapper的COM上下文0x465608已断开连接或忙于执行其他任务。释放当前COM上下文(COM上下文0x465498)中的接口。这可能会导致损坏或数据丢失。为避免此问题,请确保所有COM上下文/公寓/线程保持活动状态并可用于上下文转换,直到应用程序完全处理代表内部驻留的COM组件的RuntimeCallableWrappers。"
这个错误出现在以下代码执行期间:
int i = 2;

while(i <= lastRowPOPT)
{
     RefDocNo = poptSheet.Cells[i, 1].Text;
     RefItem = poptSheet.Cells[i, 2].Text;
     Plnt = poptSheet.Cells[i, 3].Text;
     concat = RefDocNo + RefItem + Plnt;
     poptSheet.Cells[i, 8] = concat;
     poptSheet.Range["E" + i, "G" + i].Copy(Type.Missing);
     poptSheet.Range["I" + i, "K" + i].PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteAll);

     i++;
}

这里大约有4700行数据,但实际只用到其中的1000多行,其余被抛弃了。此外,执行时间大约为4分钟,但我认为大部分时间都被耗费了。

2个回答

3

我已经弄清楚了。 显然,当外部进程(在这种情况下为Excel)运行时间过长时,操作系统认为它已经接管了计算机,不允许其他应用程序运行。 诊断结果很糟糕,但解决方案非常简单。 在一个或多个地方添加以下代码行以允许其他进程执行,现在长时间的执行完成而没有问题。

System.Windows.Forms.Application.DoEvents()

这个解决方案似乎不够通用。您能否更具体地说明您尝试解决的情况? - rudolf_franek

0

由于我没有找到任何解决方法,所以我使用了OleDbConnection和DataSet代替Interop服务,这样一切都可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接