【问题标题】:DisconectedContext was detected检测到 DisconnectedContext
【发布时间】:2014-03-24 10:25:43
【问题描述】:

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

"为此 RuntimeCallableWrapper 转换到 COM 上下文 0x465608 失败并出现以下错误:系统调用失败。 (例外来自 HRESULT:0x80010100(RPC_E_SYS_CALL_FAILED))。这通常是 因为这个 RuntimeCallableWrapper 所在的 COM 上下文 0x465608 created 已断开连接或正忙于做其他事情。 从当前 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 分钟,但我认为它大部分时间都停止了。

【问题讨论】:

    标签: c# winforms excel-interop


    【解决方案1】:

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

    System.Windows.Forms.Application.DoEvents()
    

    【讨论】:

    • 这个解决方案似乎不是通用的。您能否更具体地说明您试图解决的情况。
    【解决方案2】:

    由于我没有找到任何解决方案,因此我使用了 OleDbConnection 和 DataSet 而不是 Interop 服务,因此一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多