是否存在捕获不正确关闭应用程序的事件

本文关键字:应用程序 事件 不正确 存在 是否 | 更新日期: 2023-09-27 18:01:41

我有wpf, c#, sql express应用程序,这意味着软件与数据库。假设我有一个选项卡项,在选项卡项中有数据网格。我从一个数据网格中购买员工并将其放入篮子数据网格。假设在我的主数据网格中有10支铅笔,我买了5支。现在主数据网格是5,篮子数据网格是5。直到我按下购买按钮,它才会留在篮子里。现在我的问题是,假设停电了,我的申请被关闭了。在我的主数据网格是5和篮子是0后初始化。所以我失去了篮子里的东西。我可以在关闭应用程序或关闭标签项时管理它。但无法管理,当应用程序关闭不当。在c#中有什么机制、方法、事件来处理这个问题吗?我知道你们大多数人会说使用事务,我将在下一个版本中使用,这不会很快。现在我想知道如何处理我们的交易。我希望你明白我的意思。什么好主意吗?

这里的例子假设您的库存中有12支钢笔和15支铅笔(主数据网格)。你的库存中有2支钢笔和5支铅笔。当你出售它的时候,它会进入篮子数据网格。现在在主数据网格中有10支钢笔和10支铅笔。篮子里有2支钢笔和5支铅笔。如果我不点击提交按钮,它将不会被记录在销售数据库。假设我在工作,从库存中出售商品,电力下降。我的库存中有10支钢笔和10支铅笔。篮子是空的。没有记录在sell数据库中因为没有点击按钮

是否存在捕获不正确关闭应用程序的事件

最简单的方法是在添加项目时在数据库中设置一个脏标志以及篮子的详细信息。

然后在结账过程完成时清除脏标志。

当您重新启动应用程序时,检查此标志。如果它是清晰的,那么你可以从头开始。如果它已设置,则拉回篮子的详细信息,并根据需要处理它。

它不是很干净,但它将完成工作。

所以我仍然不完全确定这在你的代码中是如何工作的,但我会给你两种方式的答案:

  1. 如果你只在DB中存储库存数据(在主网格中的数据),那么当应用程序关闭时,你将失去篮子中的所有内容,因为内存丢失了。如果是这种情况,您唯一的解决方案是将数据也存储在DB中的篮子中。

  2. 如果您将库存和购物篮数据存储在DB中,那么您有一些像这样的代码:


    update inventory
    update basket

如果您的问题是应用程序在这两行代码之间被强制关闭,那么唯一的解决方案是添加一个事务作用域:

start transaction
update inventory
update basket
end transaction

这是确保数据安全的唯一方法。

如果你处于第一种情况,你应该执行解决方案,但这实际上会把你带到第二种情况。所以我建议你不要等到下一个版本才实现事务作用域。