微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RegisterWaitForSingleObject使用RealBasic观察目录

我正在尝试使用FindFirstChangeNotification函数来查看目录的更改。 如果我把由FindFirstChangeNotification返回的句柄填充到WaitForSingleObject中,这将起作用。 问题是WaitForSingleObject阻塞整个应用程序,直到它返回。

所以,我环顾四周,似乎RegisterWaitForSingleObject是要走的路:

Sub monitorDir(dir As FolderItem) Declare Function FindFirstChangeNotificationW Lib "Kernel32" (dirPath As WString,watchChildren As Boolean,eventTypeFilter As Integer) As Integer Declare Function RegisterWaitForSingleObject Lib "Kernel32" (ByRef waiterHWND As Integer,HWND As Integer,cllbck As Ptr,_ context As Integer,wait As Integer,flags As Integer) As Integer Dim allFilters As Integer = &h00000001 Or &h00000002 Or &h00000004 Or &h00000008 Or &h00000010_ Or &h00000100 Dim monitorHandle As Integer = FindFirstChangeNotificationW(dir.AbsolutePath,True,allFilters) If monitorHandle <> 0 Then Call RegisterWaitForSingleObject(myCallbackHWND,monitorHandle,AddressOf MyCallbackFn,&hFFFFFFFF,0) End Sub

这似乎工作正常,应用程序继续执行。 但是,只要调用MyCallbackFn(即在目录中发生更改时),事情就会变得很奇怪。 应用程序从Process Explorer和Windows资源pipe理器开始崩溃或locking。 我必须退出Windows才能恢复的东西。

目前,MyCallbackFn所做的是这样的:

如何设置其他程序的任何可见窗口在顶部?

DateTime.UtcNow.Ticks有时跳跃了一个显着的数额

为什么我在打印语句时出现IOError:(9,'Bad file descriptor')错误

在Windows中自动sass编译

Windows中应用程序图标的最佳实践

Sub MyCallbackFn() Declare Function UnregisterWaitEx Lib "Kernel32" (waitHWND As Integer,eventHandle As Integer) As Integer Call UnregisterWaitEx(myCallbackHWND,0) MsgBox("Change Detected") End Sub

我是通过使用RegisterWaitForSingleObject吠叫错误的树,我有错误地使用它,或者有一些限制在RealBasic导致callback爆炸系统?

无法从UWP应用程序中看到本地主机

用于将Windows短path转化为长path的Ruby方法

尝试运行lein repl并且不能传递神器org.clojure:tools.nrepl:pom:0.2.3 from / to central

如果以文件位置的pathdirname启动,资源pipe理器不显示文件

从Java创build一个快捷方式文件

您在RegisterWaitForSingleObject()中RegisterWaitForSingleObject()的回调函数在另一个线程(http://msdn.microsoft.com/zh-cn/library/ms685061.aspx)上调用&#xFF1A;

回调例程由工作线程在对象的状态变为信号或者超时间隔结束时执行。

我不知道任何有关RealBasic的线程支持,但至少Windows上的GUI操作通常需要在特定的线程上进行,而不仅仅是任何老的工作线程。 所以对该工作线程MsgBox()的调用可能是一个问题。

一个简单的事情你可以尝试调用PostMessage() (或任何RealBasic等价物)将自定义消息发布到您的应用程序可以响应的窗口消息队列(例如通过调用MsgBox() )。

也许不相关,但MyCallBackFn()声明在哪里? 如果是实例方法,则应使用WeakAddressOf而不是AddressOf。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐