我的程序突然存在,找不到原因,但我知道代码的哪个部分会导致此问题。我会尽量解释发生了什么...
首先,我用下面的命名空间在我的窗户形式,除了常见的:当我启动另一个进程时,程序突然退出
using System.Diagnostics;
using System.IO;
using System.Data.OleDb;
我有检索当前的汽车增量的自定义函数通过寻找最大的ID和一个增加它的行ID:
void getCurrentQuestionNo()
{
//calculate current questionNo based on DB Info
classDataLayer DL = new classDataLayer();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "SELECT MAX([questionID]) FROM questions";
DataSet ds = DL.select(cmd);
questionNo = Convert.ToInt32(ds.Tables[0].Rows[0][0]) + 1;
}
此功能的Form_Load函数内推出设置了一个名为questionNo供以后使用全局变量。
而且我有下面的代码,以打开Microsoft Word应用程序的实例。这段代码放在一个按钮的点击事件中:
try
{
//copy an instance of empty question template to Temp folder
File.Copy(@"Templates\EmptyQuestion.docx", @"Temp\TempQuestion.docx", true);
//launch ms-word to open the document
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "WINWORD.EXE";
startInfo.Arguments = @"Temp\TempQuestion.docx";
Process.Start(startInfo);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
问题:
检索最后questionNo并打开Word文档中的代码或者单独工作正常。我的意思是当我在form_load内部调用getCurrentQuestionNo()时,它的工作原理并没有问题。当我禁用form_load中的getCurrentQuestionNo()函数时,启动word过程的代码正常工作。
但是,当我在form_load中调用getCurrentQuestionNo(),然后单击该按钮启动文字处理时,仍然一切正常,但在几秒钟后突然出现,整个程序退出时没有任何消息,该文字仍在运行。这就像我从Visual Studio IDE中点击停止按钮。
什么可能是错的?
这显示在输出窗口:
类型“System.IO.IOException”的第一次机会异常出现在mscorlib.dll
程序“[5032] test.vshost.exe:程序跟踪”已退出与代码0(0x0)。
程序 '[5032] test.vshost.exe:托管(v4.0.30319)' 已经退出,代码-2147483645(0x80000003)。
我测试了很多的情况下,在使用过程中沿任何使用OLEDB会导致同样的问题。我减少了我的代码如下:
代码检索最后自动递增ID:
OleDbConnection con1 = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=db.accdb");
OleDbCommand cmd1 = new OleDbCommand("SELECT MAX([questionID]) FROM questions", con1);
con1.Open();
txtID.Text = cmd1.ExecuteScalar().ToString();
con1.Close();
和推出过程代码:
Process p = new Process();
p.StartInfo.FileName = "notepad.EXE";
p.Start();
我把他们两个单独的按钮单击事件中。再次,每个按钮单独工作时都能正常工作,但单击button1,然后button2会使程序崩溃!
我真的很迷茫... :(
有趣的是,有时程序本身并没有退出,一切继续合作,但在这种情况下,“vshost.exe已停止工作”当我关闭出现对话框程序正常问题详细信息显示ntdll.dll是故障模块,有时是clr.dll 我也收到了:Fault Module Name:StackHash_4d02
未处理的异常。 –
输出窗口中的任何内容? –
我已经看到这发生在它通常之前,当你在构造函数之外设置一个字段和它的错误,因为这是在构造函数/方法之外,它还没有实例化类,所以正常的错误处理程序不能踢,整个程序关闭 – MikeT