河伯 发表于 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
命令函数调用对话框,点击确定后执行一个比较耗时的操作:

<CommandMethod("TTT")> 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,则命令执行时很多AutoCAD界面元素时不显示,也不行。
怎么才能让对话框即时关闭不延迟?

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

    <CommandMethod("vt2")> _
    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 res <> Windows.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:28

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

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

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

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

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

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

Student 发表于 2012-4-30 19:01
今天,也遇到这个问题。转了几道弯才算凑付过去。

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