我现在在Winform中用到了线程去调用Excel汇出资料;在汇出的过程中,有可能会取消一些线程,我如何才能关闭掉运行中的Excel进程;调用Excel代码如下:
类级:
ExportHelper eHelper;
Thread t;方法级:
string strTemp = string.Empty;
for(int i =0; i < 10; i++){
strTemp = strTemp = objDS.Tables[0].Rows[i][0].ToString();
eHelper = new ExportHelper(strTemp); //因为需要传递参数
t = new Thread(new ThreadStart(eHelper.Export));
t.Name = strTemp;
t.Start();
}在Export方法中我调用Excel:
m_objExcel = new excel.ApplicationClass();
然后写数据请问怎样才能够实现我说的那种效果,或者相近的效果
谢谢!
类级:
ExportHelper eHelper;
Thread t;方法级:
string strTemp = string.Empty;
for(int i =0; i < 10; i++){
strTemp = strTemp = objDS.Tables[0].Rows[i][0].ToString();
eHelper = new ExportHelper(strTemp); //因为需要传递参数
t = new Thread(new ThreadStart(eHelper.Export));
t.Name = strTemp;
t.Start();
}在Export方法中我调用Excel:
m_objExcel = new excel.ApplicationClass();
然后写数据请问怎样才能够实现我说的那种效果,或者相近的效果
谢谢!
解决方案 »
- 关于存储过程返回值的问题
- 为什么我的richTextBox中没有DragEnter和DragDrop【SOS高人】
- 求助,急
- 存储过程名的疑问?
- WinForms问题 按键事件 急急急~!!
- InvokeMember不理解?谁能解释一下
- 各位用过水晶报表的大哥,帮帮俺,俺遇上了报表格式控制的问题,不知道怎么处理?
- UIAutomation Log机制
- 平平,祝贺你,让我们一起进步吧?这几天公司的NT服务器出了问题,真是从早忙到晚....!)
- C# 有一个钉钉导出的Excel表,需要导入(添加)ACCESS数据库(已经有表格式),但两个表的格式不对应
- 周末交作业了,50分求助:“未将对象引用设置到对象的实例”
- asp.net 开发一个内部网络软件,有报酬!!烟台地区优先考虑。
m_ExcelApplication.Workbooks.Close();
m_ExcelApplication.Quit();
//然后让资源回收站来回收资源
m_ExcelApplication = null;
m_GridRange = null;
m_Worksheet = null;
m_oMissing = null;
System.GC.Collect();
我现在用线程调用excel来汇出资料
在我的ExportHelper 中有释放excel进程的方法
//釋放資源
if (null != m_objBook)
{
m_objBook.Close(m_objOpt, m_objOpt, m_objOpt);
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
} if (null != m_objExcel)
{
m_objExcel.Workbooks.Close();
m_objExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
}
m_objBook = null;
m_objExcel = null;
GC.Collect();
不过这是正常完成的情况,我现在是要在往excel中写资料的时候,也就是现在这个线程是在执行,
比如:我现在有三个线程执行,那么在任务管理器中就会看见三个excel的进程,
PID为: 1000,1500,2000
我现在想结束掉Pid为1000的
此时程序仍然在向这个Pid为1000的excel所对应的文件中写资料
我要如何去结束掉它
我的做法是:
Thread[] oThreadPool = new Thread[10];
string strTemp = string.Empty;
for(int i =0; i < 10; i++){
strTemp = strTemp = objDS.Tables[0].Rows[i][0].ToString();
eHelper = new ExportHelper(strTemp); //因为需要传递参数
t = new Thread(new ThreadStart(eHelper.Export));
t.Name = strTemp;
oThreadPool[i] = t;
t.Start();
}然后结束的时候是通过一个输入框来的
string strName = this.txtProcessCount.Text.Trim();
for (int i = 0; i < oThreadPool.Length; i++)
{
if (oThreadPool[i].ThreadState != System.Threading.ThreadState.Stopped
&& oThreadPool[i].Name.Equals(strName))
{
oThreadPool[i].Abort();
}
} 这样是可以完成功能,但是会报异常,因为调用了com接口.而且还会提示excel文件被修改是否需要保存的对话框,因为我这个是做为一个后台程序运行,所以出现这样的问题,如果不点对话框,程序就不能继续运行.
请问有没有什么好的方法,或者哪位前辈做过类似的功能的请指点一下,谢谢!