我在我的C#应用程序中收到了一个错误信息:“检测到已断开的上下文”。这个错误的原因是什么?如何解决这个问题?以下是我代码的流程。
我启动了一个线程来进行数据采集。它从com端口收集数据并将数据保存在Excel文件中。
数据采集(线程)--->扫描232端口(线程)------>打印到Excel。
我从MSDN库中找到了一些造成这个错误的原因。它说需要MDA帮助。但是我不是一个经验丰富的C#开发人员,所以我无法理解这个问题。请帮助我解决这个问题。
这不是完整的代码,我只复制了一部分用于创建和编写Excel文件的代码。
我还遇到了另一个问题。
在向Excel写入数据时,如果我打开任何其他Excel文件,则当前数据库文件也会被打开。如何解决这个问题?
我启动了一个线程来进行数据采集。它从com端口收集数据并将数据保存在Excel文件中。
数据采集(线程)--->扫描232端口(线程)------>打印到Excel。
我从MSDN库中找到了一些造成这个错误的原因。它说需要MDA帮助。但是我不是一个经验丰富的C#开发人员,所以我无法理解这个问题。请帮助我解决这个问题。
这不是完整的代码,我只复制了一部分用于创建和编写Excel文件的代码。
我还遇到了另一个问题。
在向Excel写入数据时,如果我打开任何其他Excel文件,则当前数据库文件也会被打开。如何解决这个问题?
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;
}
错误信息:
上下文 '0x1a1178' 已断开连接。正在从当前上下文(上下文 0x1a1008)中释放接口。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/公寓都保持活动状态,直到应用程序完全完成代表其中运行的 COM 组件的 RuntimeCallableWrappers。