我需要帮助摆脱这个错误:
“转换到此上下文的RuntimeCallableWrapper的COM上下文0x465608 失败,出现以下错误:系统调用失败。 (例外 HRESULT:0x80010100(RPC_E_SYS_CALL_FAILED))。这通常是 因为这个RuntimeCallableWrapper所在的COM上下文0x465608 已创建已断开连接或正在忙于执行其他操作。 从当前COM上下文(COM上下文)释放接口 0x465498)。这可能会导致损坏或数据丢失。为了避免这种情况 问题,请确保所有COM上下文/公寓/线程都保留 有效且可用于上下文转换,直到应用程序 完全使用代表的RuntimeCallableWrappers完成 生活在其中的COM组件。“
在执行此代码期间会发生这种情况:
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分钟,但我认为它大部分时间都停止了。
答案 0 :(得分:2)
我已经弄明白了。显然,当外部进程(在本例中为Excel)运行时间过长时,操作系统认为它已经接管并且不允许其他应用程序运行。诊断很可怕,但解决方案非常简单。在一个或多个位置添加以下代码行以允许执行其他进程,现在长时间执行完成而没有问题。
System.Windows.Forms.Application.DoEvents()
答案 1 :(得分:0)
由于我没有找到任何解决方案,我使用了OleDbConnection和DataSet而不是Interop服务,所以一切都很好。