Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测到断开连接的上下文_C# - Fatal编程技术网

C# 检测到断开连接的上下文

C# 检测到断开连接的上下文,c#,C#,我在我的c#应用程序中收到一条错误消息“检测到断开连接的上下文”。 错误的原因是什么?如何解决这个问题? 这里我解释我的代码流 我已经启动了一个数据收集线程。它从com端口收集数据,并将数据保存在EXCEl文件中 数据采集(线程)--->扫描232端口(线程)--->打印到EXCEL 我从MSDN库中找到了导致此错误的一些原因。上面写着需要MDA的帮助。但我不是一个有经验的c#开发人员。所以我不能理解这个问题。请帮我解决这个问题 这不是你参考的完整代码,我复制了我用来创建和编写excel文件的部

我在我的c#应用程序中收到一条错误消息“检测到断开连接的上下文”。 错误的原因是什么?如何解决这个问题? 这里我解释我的代码流

我已经启动了一个数据收集线程。它从com端口收集数据,并将数据保存在EXCEl文件中

数据采集(线程)--->扫描232端口(线程)--->打印到EXCEL

我从MSDN库中找到了导致此错误的一些原因。上面写着需要MDA的帮助。但我不是一个有经验的c#开发人员。所以我不能理解这个问题。请帮我解决这个问题

这不是你参考的完整代码,我复制了我用来创建和编写excel文件的部分

我还面临一个问题

在excel上写入数据时,如果我打开任何其他excel文件,代码中使用的当前数据库文件也将打开。如何解决这个问题?
app=new Excel.ApplicationClass();
Workbook1=app.Workbooks.Add(Type.Missing);
工作表1=(Excel.Worksheet)工作簿1.工作表[1]//正在激活工作簿的第1页。
公共bool加载\u Excel\u文件(字符串文件名)
{
Excel_Filepath=文件名;
尝试
{
如果(Excel\u文件路径!=“”)
{                
Workbook1.SaveAs(Excel_文件路径、Excel.XlFileFormat.xlXMLSpreadsheet、,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Excel.XlSaveAsAccessMode.xlNoChange,
类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失);
}
其他的
{
lbl_database.Text=“数据库关闭”;
}
if(ExcelFile\u Select.Checked==true)
{
rbtn_database.Checked=true;
lbl_database.Text=“在数据库上收集数据”;
}
返回(真);
}
抓住
{
ExcelFile_Select.Checked=false;
lbl_database.Text=“数据库关闭”;
end_excel();
返回(假);
}
}
公共作废打印到Excel(对象exc行cnt、对象exc列cnt、对象栅格行cnt)
{
工作表1=(Excel.Worksheet)工作簿1.Worksheets.Add(Type.Missing,(Excel.Worksheet)工作簿1.Worksheets[Sheet_Num++],Type.Missing,Type.Missing);
试一试{
对于(int column\u count=1;((column\u count)
错误消息:

上下文0x1a1178'已断开连接。从当前上下文(上下文0x1a1008)释放接口。这可能会导致损坏或数据丢失。 为避免此问题,请确保在应用程序完全完成之前,所有上下文/单元都保持活动状态
RuntimeCallableWrappers,表示在其内部活动的COM组件。

您可以通过禁用以下异常来删除异常:

  • 选择项目
  • 转到菜单:调试->异常
  • 转到托管调试异常。并从异常类型中删除检查,您体验过

  • 在我的例子中,我正在使用Outlook,在尝试访问“主线程”以外的线程上的Outlook对象模型时,我遇到了类似的错误。在我的outlook加载项中,我还有一个Windows窗体,在Windows窗体上,我启动了一个新线程,该线程开始了一个长时间运行的操作,该操作需要访问outlook对象模型。此外,该线程试图在某些里程碑更新Windows窗体上的进度条。根据下面的文章,我做了2项修改,似乎解决了这个问题:

    我所做的改变:

    • 将线程更改为单线程单元

    • 删除触发事件以更新主线程上进度条的代码


    如果我理解您的问题,问题是打开Excel时会显示您的文件?这是预期的,您对代码的所有操作都是操纵Excel应用程序。所以Excel会显示你的文件,它不知道这不是一个用户文件

    如果您真的不想这样做,那么不使用COM/Interop就是前进的方向。 查看库,以及使使用前者和Excel非常容易的库


    最后,如果你真的想每分钟都写,Excel也不是你想写的格式。查看纯文本、XML或某种嵌入式数据库。

    在Visual Studio的调试模式下运行Excel VSTO工作簿时,我收到了相同的消息。它把它修好了
    app = new Excel.ApplicationClass();
    
      Workbook1 = app.Workbooks.Add(Type.Missing);
    
      Worksheet1 = (Excel.Worksheet)Workbook1.Worksheets[1];//ACtivating sheet-1 of workbook.
    
    
    public bool Load_Excel_file(string Filename)
        {
            Excel_Filepath = Filename;
    
            try
            {
                if (Excel_Filepath  != "")
                {                
    
                    Workbook1.SaveAs(Excel_Filepath, Excel.XlFileFormat.xlXMLSpreadsheet,
                   Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    
    
                }
    
                else
                {
    
                    lbl_database.Text = "Database OFF";
    
                }
    
                if (ExcelFile_Select.Checked == true)
                {
                    rbtn_database.Checked = true;          
                    lbl_database.Text = "Collecting data on Database";
                }
    
                return (true);
            }
            catch
            {
                ExcelFile_Select.Checked = false;
                lbl_database.Text = "Database OFF";
    
                end_excel();       
                return (false);
    
            }
    
        }
    
     public void Print_to_Excel(object  exc_row_cnt_t, object  exc_col_cnt_t, object grid_row_cnt_t)
    {
        Worksheet1 = (Excel.Worksheet)Workbook1.Worksheets.Add(Type.Missing, (Excel.Worksheet)Workbook1.Worksheets[Sheet_Num++], Type.Missing, Type.Missing); 
    try{
    
                for (int column_count = 1; ((column_count) < Grid_Collect_Data.ColumnCount - UNUSED_CELLS); column_count++)
                {
                    if ((Grid_Collect_Data.Rows[grid_row_cnt].Cells[column_count].Value) != null)
                    {
                        ((Excel.Range)Worksheet1.Cells[exc_row_cnt, (exc_col_cnt * (Grid_Collect_Data.ColumnCount - UNUSED_CELLS )) + column_count ]).Value2 = (Grid_Collect_Data.Rows[grid_row_cnt].Cells[column_count].Value).ToString();
                        ((Excel.Range)Worksheet1.Cells[exc_row_cnt, (exc_col_cnt * (Grid_Collect_Data.ColumnCount - UNUSED_CELLS)) + column_count]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
                    }
                }
    
    
      Workbook1.Save();
     }
      catch (Exception e)
            {
                end_excel();           
    
                MessageBox.Show(e.ToString(), "Wireless Sensor Network", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    
            }
    
     }
     void end_excel()
        {
    
    
            Workbook1 = null;
            Worksheet1 = null;
            app.Quit();
            app = null;
            if (Worksheet1 != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(Worksheet1);
            if (Workbook1 != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(Workbook1);
            if (app != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
            Workbook1 = null;
            Worksheet1 = null;
            app = null;
    
            GC.Collect();
            Excel_app_run = false;
            Is_Load_Report = false;
    
    
        }