【发布时间】:2013-06-21 13:00:41
【问题描述】:
我的数据库中有一个存储各种文件的表。
文件名显示在 ListView 中,当用户点击其中一个时,它会由注册的应用程序根据文件扩展名打开。
这是代码:
if (listViewArchivos.HasItems)
{
dynamic result = listViewArchivos.SelectedItem;
var nombre = Path.GetTempPath() + admin.buscarNombreArchivo((int)result.Id);
var bytes = admin.buscarArchivo((int)result.Id);
try
{
using (var writer = new BinaryWriter(File.Open(nombre, FileMode.Create)))
{
writer.Write(bytes);
}
var p = Process.Start(nombre);
p.WaitForExit();
}
catch (Exception exc)
{
InterfazUtil.error(exc.Message); // This shows a MessageBox
}
finally
{
File.Delete(nombre);
}
}
它适用于 docx、pdf、txt 等。但是当我尝试打开图像时,Window Photo Viewer (Windows 7) 成功打开了该文件,但抛出了 NullReferenceException。
如果我先关闭 WPV,然后再关闭 MessageBox,则该文件将从临时文件夹中删除。
如果我先关闭 MessageBox,则图像会从 WPV 中消失,并且在我关闭 WPV 后,该文件不会从临时文件夹中删除。
现在,如果我删除了 catch 块,那么 WPV 会成功打开该文件,并且在关闭它之后,该文件不会从临时文件夹中删除。显然应用程序崩溃是因为异常没有得到管理。
看起来问题是 WPV。
知道哪里出了问题吗?
TIA
编辑:
异常被抛出
p.WaitForExit();
【问题讨论】:
-
您对
NullReferenceException了解更多吗?什么是 null...哪行代码在抛出它? -
@DonBoitnott 谢谢。错过了。调用 WaitForExit 时抛出异常。
-
您似乎没有从
Start()得到有效的p。对吗? -
@DonBoitnott 当我调试代码时,我可以看到调用 WaitForExit 时 p 为空。
-
@DonBoitnott 我认为你是对的。如何强制返回有效的 p?
标签: c# nullreferenceexception process.start waitforexit