检测到DisconectedContext

时间:2014-03-24 10:25:44

标签: c# winforms excel-interop

我需要帮助摆脱这个错误:

  

“转换到此上下文的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分钟,但我认为它大部分时间都停止了。

2 个答案:

答案 0 :(得分:2)

我已经弄明白了。显然,当外部进程(在本例中为Excel)运行时间过长时,操作系统认为它已经接管并且不允许其他应用程序运行。诊断很可怕,但解决方案非常简单。在一个或多个位置添加以下代码行以允许执行其他进程,现在长时间执行完成而没有问题。

System.Windows.Forms.Application.DoEvents()

答案 1 :(得分:0)

由于我没有找到任何解决方案,我使用了OleDbConnection和DataSet而不是Interop服务,所以一切都很好。