| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1620 人关注过本帖, 1 人收藏
标题:可执行文件退出时,总是显示不能关闭
只看楼主 加入收藏
zclllt
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2006-3-16
收藏(1)
 问题点数:0 回复次数:5 
可执行文件退出时,总是显示不能关闭

可执行文件退出时,总是显示不能关闭visual foxpro这是怎么回事?

搜索更多相关主题的帖子: 文件 
2006-06-30 13:11
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 

没有清除工作任务。


两人行已有我师……
2006-06-30 13:37
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
“不能退出VisualFoxpro”的解决方法综述
是否曾不断的试着关闭你的应用程序, 而得到的回答是不能退出?
你开发了一个应用程序并将它交会给你的用户, 一切正常。 但是突然你接到一个电话, 用户试着关闭应用程序,但所得到的信息是“"不能退出Visual FoxPro”。
为什么?因为应用程序仍然在事件循环中。

在应用程序某一地方, 你可能有类似下面的代码:
DO MainMenu.MPR
READ EVENTS
一旦在程序中发布了事件循环( READ EVENTS 命令), 在退出事件循环前,你就不能退出 VFP。 要清除事件循环,发布一条 CLEAR EVENTS 命令。只要用户想关闭应用程序时(如从系统菜单中选择了“关闭”或“退出”),你可以正常的执行一条 CLEAR EVENTS。
但是如果用户试着单击窗口标题栏中的关闭按钮时,会发生什么情况呢? 或者用户在应用程序仍然运行着的时候关闭 Windows 又会怎样? 在这些情况下, 应用程序没有机会执行 CLEAR EVENT,事件循环仍然是活动的, 因此出现了不能退出 VFP 的信息。
要避免这一点,可使用 ON SHUTDOWN 命令。 该命令的运行方式与 VFP 的其它 “On” 命令(如 ON ERROR)一样, 它指定一个当确定的事件发生时要执行的行动。 在这种情况下, 事件是以任何方式试图关闭应用程序。
因此你所要做的只是执行 ON SHUTDOWN CLEAR EVENTS。 应该在应用程序开始时—发布 READ EVENTS 之前。一旦你这样做了, 用户决不会再次见到不能退出信息。 当用户单击窗口标题样中的关闭按钮时,程序将执行 ON SHUTDOWN 代码,这将会退出事件循环并将控制返回 READ EVENTS 后面的代码。

什么也没有发生

好了,还不完全。 现在试着在 VFP 开发环境中运行一个 .APP, 关闭该 .APP, 然后试着退出 Visual FoxPro。当你用文件菜单中的退出时,没有什么问题,但在命令窗口打入 QUIT 或单击窗口标题栏的关闭按钮时,结果是相同的:什么也没有发生,没有退出 VFP,没有错误提示。
为什么?因为 ON SHUTDOWN 命令仍然在起作用,因此在关闭 VFP 时,VFP 只是简单地执行一条 CLEAR EVENTS, 这对开发环境没有作用,并且也没有程序在运行。
要避免这一点, 返回到应用程序中, 并添加另一个 ON SHUTDOWN 命令。 这一次,,仅仅是不带任何子句的 ON SHUTDOWN, 将它放入清理代码中, 就是说, 在 READ EVENTS 后面的某处。 它的作用是取消原来的 ON SHUTDOWN。
这一对命令— ON SHUTDOWN CLEAR EVENTS 和 ON SHUTDOWN —是想雅致地关闭应用程序的最小要求。 但是,根据应用程序的结构,你可能需要做更多的事。

清理

在我们自己的应用程序中, 文件菜单中的退出菜单项,在发布 CLEAR EVENTS 命令前执行某些特定的清除代码。 特别地,遍历所有已打开表单(通过 _SCREEN 的 Forms 集合Z), 关闭各个表单。 在这样做的同时,提示用户处理未保存的修改,这样做可以让用户决定是否取消关闭应用程序,以避免因清除事件循环而仍在屏幕上留下一些打开的表单。
无论用户是采用何种方法关闭应用程序,程序需要经过相同的处理过程。 要达到这一点,我们放入以上处理到一个我们叫做 FileExit 的过程中。 文件菜单的的退出菜单项简单地用 DO FileExit 调用该过程,在 ON SHUTDOWN 命令中也一样。 换句话说,现在不是 ON SHUTDOWN CLEAR EVENTS,而是 ON SHUTDOWN DO FileExit。 采用这种方法, 无论用户采用什么方法关闭程序,关闭处理总是相同的。

事务

至此,在一般情况下已经可以很好地解决“不能退出VFP”的问题。
但是,有些个别情况就不能很好的完成这一任务。
特别是加了ON ERROR .......QUIT 语句来捕捉错误然后退出的时候,在这时事务处理中修改一个数据库中的记录时,网络上的其他用户在结束事务前不能访问(不论是读还是写)这些记录。当网络上的其他用户要访问事务中修改过的记录时,必须等到事务结束之后。这时候运行 QUIT 命令仍会出现“不能退出VFP”提示。
我们可以使用 TxnLevel 函数来确定当前事务的层次(它返回 0 到 5 之间的一个值,如果进程中没有事务,返回 0),然后用 RollBack 恢复当前事务期间所做的任何修改。如果事务是嵌套的,则只恢复自前一个 BEGIN TRANSACTION 命令起所做的修改,恢复后,程序继续执行下面的语句。这样,我们再退出就可以了。

示例代码
ON SHUTDOWN DO FileExit

*PROCEDURE FileExit
DO WHILE TxnLevel() > 0
ROLLBACK
ENDDO
CLEAR EVENTS
DO WHILE _SCREEN.FormCount > 0
_SCREEN.Forms(1).Release
ENDDO

两人行已有我师……
2006-06-30 13:38
lxyjcy2006
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-7-9
收藏
得分:0 
曾试编程序,单击窗口标题栏中的关闭按钮不能退出程序的问题一直没解决,书上没查到.谢谢了.
2006-07-12 00:38
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
ON SHUTDOWN QUIT

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-07-12 01:41
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
这些代码应该加在主窗口的什么地方呢?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2006-07-13 08:26
快速回复:可执行文件退出时,总是显示不能关闭
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023187 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved