【问题标题】:VB.NET equivalent of Timeout.bas Module from VB6VB.NET 等效于 VB6 中的 Timeout.bas 模块
【发布时间】:2010-12-30 04:49:42
【问题描述】:

我正在寻找一个非常方便的小 *.bas 文件的 VB.NET 代码,该文件以前在 Visual Basic 6 中使用过。该文件名为 timeout.bas,它对我来说是最棒的模块。我想最终切换到开始使用 VB.NET,但这个单一文件阻碍了我。尝试在没有它的情况下使用 .NET 就像让我瘫痪一样。有人可以让这个代码在.NET中为我工作吗?

只有几行:

Attribute VB_Name = "Module1"
Sub timeout(duration)
starttime = Timer
Do While Timer - starttime < duration
DoEvents
Loop
End Sub

基本上你添加包含该代码的 timeout.bas 文件,你可以这样做:

Text1.text = "hello"
timeout .5
Text1.text "World!"

真是太棒了。任何人都请为我在 VB.NET 中重做!谢谢!

【问题讨论】:

    标签: .net vb.net visual-studio vb6


    【解决方案1】:

    这是非阻塞繁忙循环的最糟糕尝试。

    您可以通过在 while 循环中放入以下两行来对 VB.Net 进行字面翻译:

    System.Threading.Thread.Current.Sleep(1000)
    Application.DoEvents
    

    这会休眠一秒钟,然后在每次迭代中处理消息循环。

    但是,你真的应该问自己为什么需要等待一段时间?你在等什么,你不能以不同的方式等待它吗?如果主线程正在等待后台worker完成,你可以让主线程继续正常处理消息循环,后台worker可以通过Dispatcher通知它发送消息。

    【讨论】:

      【解决方案2】:
      Sub timeout(ByVal duration As Double)
          Dim starttime = DateTime.Now
          Do While (DateTime.Now  - starttime).TotalSeconds < duration
              My.Application.DoEvents()
          Loop
      End Sub
      

      使用时将表单的 Enable 属性设置为 false。

      【讨论】:

        【解决方案3】:

        你可以这样做:

        System.Threading.Thread.Sleep(5000);
        

        .Net 不鼓励这种事情,并且会锁定你的 UI。

        试试这个

        Sub timeout(seconds)
           Dim endtime = DateTime.Now.AddSeconds(seconds)
           Do While DateTime.Now < endtime
             threading.thread.sleep(100)
             application.doevents
           Loop
        End Sub
        

        【讨论】:

        • 这应该对你有用,但你仍然需要考虑你为什么要等待......你应该考虑查看计时器和计时器事件。
        猜你喜欢
        • 1970-01-01
        • 2014-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多