【发布时间】:2014-07-12 20:10:06
【问题描述】:
我有一个硬件设备需要在程序执行结束时卸载,否则它将处于未定义/不稳定/危险状态。这在正常操作期间很容易,但在任何类型的崩溃或意外情况下,它通常不会正确卸载。
搜索,我发现我可以设置一个事件来清理进程退出时的板子,或者至少是其中的一小部分:
public MainForm()
{
...
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);
...
}
static void OnProcessExit(object sender, EventArgs e)
{ myHardwareDevice.checkAndPerformSafeShutdown();
}
checkAndPerformSafeShutdown 是原生 dll 函数调用的包装器,用于清理驱动程序并将所有硬件置于安全状态。但是,这无法编译:
错误 CS0120:非静态字段、方法或属性“projectNme.MainForm.myHardwareDevice”需要对象引用。
此事件处理程序的范围是什么?为什么它与类中的任何其他事件处理程序不同?有什么办法可以参考硬件设备吗?
【问题讨论】:
-
MyHardwareDevice是一个类吗? -
您是否将
myHardwareDevice声明为静态? -
also - blogs.msdn.com/b/jmstall/archive/2006/11/26/… - 没有回答您的问题,但可能会提出更多问题