河伯 发表于 2011-1-19 16:03:00

对话框延迟关闭的问题

对话框Dialog1,上有一个确定按钮:

    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
      Me.DialogResult = System.Windows.Forms.DialogResult.OK
      Me.Close()
    End Sub
命令函数调用对话框,点击确定后执行一个比较耗时的操作:

Public Sub TTT()
      Dim doc As Document = Application.DocumentManager.MdiActiveDocument
      Dim ed As Editor = doc.Editor
      Dim Dlg As New Dialog1
      Application.ShowModalDialog(Dlg)
      If Dlg.DialogResult = Windows.Forms.DialogResult.OK Then
            For i = 0 To 30000
                ed.WriteMessage(vbLf & "i={0}", i)
            Next
      End If
    End Sub问题:点击确定按钮后,对话框直到命令函数执行完成才消失。VBA中用DoEvents方法可以实现,VB.NET中DoEvents方法不起作用。如果Click事件加上Me.Hide,则命令执行时很多界面元素时不显示,也不行。
怎么才能让对话框即时关闭不延迟?

雪山飞狐_lzh 发表于 2011-1-19 17:32:00


   _
    Public Sub Test2()
      Dim doc As Document = Application.DocumentManager.MdiActiveDocument
      Dim ed As Editor = doc.Editor
      Dim res As Windows.Forms.DialogResult
      Using Dlg As New Form1()
            res = Application.ShowModalDialog(Dlg)
      End Using
      If resWindows.Forms.DialogResult.OK Then Return
      ed.UpdateTiledViewportsFromDatabase()
      For i = 0 To 30000
            ed.WriteMessage(vbLf & "i={0}", i)
      Next
    End Sub

河伯 发表于 2011-1-19 20:30:00

测试了一下,UpdateTiledViewportsFromDatabase虽然能立即关闭对话框,却导致一次重新生成,不可行。另外,Using语句好像专门用于对非托管资源的调用,用在Form类型上应该不起作用吧。
前面同样的代码,在WIN XP中有延迟,在WIN7中就没有,看来和平台有关。.NET API里应该有解决办法,只是一时找不到。

雪山飞狐_lzh 发表于 2011-1-19 20:48:00

Using用于IDispose接口
估计只有在.Net里找?或者调用Api?未知
NetAPi应该没有解决方案?

Student 发表于 2012-4-30 19:01:00

今天,也遇到这个问题。转了几道弯才算凑付过去。

single-yu 发表于 2013-12-31 15:28:00


这个问题如何解决的呢,请教一下!
页: [1]
查看完整版本: 对话框延迟关闭的问题