【问题标题】:Why does this program need MsgBox?为什么这个程序需要 MsgBox?
【发布时间】:2009-12-15 18:13:33
【问题描述】:

长话短说:我正在尝试编写一个将 IE 的历史记录转储到文本文件的应用程序。因为我很懒,所以我去寻找一个预先存在的库,并找到了这个漂亮的项目来构建:http://www.freevbcode.com/ShowCode.asp?ID=6702。只是,我卡住了……

我终于得到了转储历史记录的程序,但它只有在我将 MsgBox() 放在 Module1.vb 的第 169 行时才能工作。我试过在那里放一个Thread.Sleep(),但这不起作用。那里必须有一个消息框,否则只会列出今天的历史记录。

我的猜测,因为这是在与wininet.dll 交谈,所以这是一个并发的事情。 Thread.Sleep()(对于 For...Next 循环)停止程序监听;在分配值之前没有任何东西使它退出循环,但是 MsgBox() 是正确的。除了 MsgBox() 之外还有什么东西会产生同样的效果吗?我希望不必点击 OK 30 次即可使程序正常运行。

这是我的分支/版本/派生作品:http://profnano.org/andy/misc/img/HistList.zip;这是一个 VS.NET2003 项目。

【问题讨论】:

    标签: vb.net winapi msgbox


    【解决方案1】:

    MsgBox() 泵送一个消息循环。这可以让所有类型的代码解开。 Windows 有机会自己绘制。解决了由于主线程陷入循环而导致的 COM 死锁,这在涉及 IE 时总是一个问题。调用 DoEvents() 是 MsgBox() 的非常不完美的替代方法。

    【讨论】:

    • 嗯!这似乎有点工作。 DoEvents() 又被挤出了一天。我认为,对于这段代码,我坚持使用 MsgBox。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多