ZL1*_*tte 2 .net vb.net ado.net
我有数据记录软件在导出过程中/之后在某些机器上冻结.在正常使用期间,主窗体是记录数据.如果用户想要将该数据导出到电子表格,他们会按照步骤打开新表单.此表单也保持关注,直到表单关闭.新表单具有选择要导出的数据集的选项.选择数据集后,用户点击导出按钮.代码很长但我会试着总结一下.
Private Sub Exoprt_btn_Click(ByVal...)
Dim fs As FileStream = Nothing
Dim fw As StreamWriter = Nothing
Dim ...
Run Code Online (Sandbox Code Playgroud)
在这个SQL之后碰巧填写文件.这似乎工作正常,因为文件始终打开并正确填充.
在我们的代码结束时
fw.Close()
fs.Close()
fw.Dispose()
fs.Dispose()
System.Diagnostics.Process.Start(FileName)
Run Code Online (Sandbox Code Playgroud)
此时,当代码工作时,电子表格打开,用户可以根据需要保存或关闭.处理完新文件后,他们可以返回弹出窗口,选择要导出的新数据或关闭窗口并使用主窗体.
但是当软件冻结时,在返回数据记录程序时,数据导出表单通常是空白的,或者有时像按钮和标签这样的对象被部分加载.导出窗口仍保持焦点,但主窗体仍在更新,因为记录了新数据.尝试关闭导出窗口会导致窗口无法响应对话框.重新启动计算机显示后台的所有内容都按预期工作,但窗口的功能无法与之交互.
我尝试通过写入睡眠期和短信来识别恶意代码.
fw.Close()
label1.text = "fw.Close()"
System.Threading.Thread.Sleep(3000)
fs.Close()
label1.text = "fs.Close()"
System.Threading.Thread.Sleep(3000)
...
System.Diagnostics.Process.Start(Filename)
label1.text = "Open File"
System.Threading.Thread.Sleep(3000)
Run Code Online (Sandbox Code Playgroud)
结果是,在关闭Excel之后,如果程序没有冻结,用户只看到"打开文件",如果有,则只看到"Label1".
我做了一些研究并遇到了一些关于线程的想法,因为主窗口是线程化的并且做了自己的事情,因此这组代码没有被正确地交织.我不确定为什么有些计算机运行正常,有些计算机似乎一直锁定.
更多实验:
1)只是打开导出窗口会导致窗口在记录时冻结.打开导出窗口后,程序将从SQL填充类似datagridview的对象.
2)我可以使用另一个日志记录软件实例在原始实例记录时获取数据.这仍然会导致主实例的主窗口锁定.
3)一台曾经表现出症状的计算机似乎已经被其恶魔驱除了.