乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 81|回复: 5

对话框延迟关闭的问题

[复制链接]

13

主题

84

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-1-19 16:03:00 | 显示全部楼层 |阅读模式
对话框Dialog1,上有一个确定按钮:
  1.     Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
  2.         Me.DialogResult = System.Windows.Forms.DialogResult.OK
  3.         Me.Close()
  4.     End Sub
命令函数调用对话框,点击确定后执行一个比较耗时的操作:
  1. Public Sub TTT()
  2.         Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  3.         Dim ed As Editor = doc.Editor
  4.         Dim Dlg As New Dialog1
  5.         Application.ShowModalDialog(Dlg)
  6.         If Dlg.DialogResult = Windows.Forms.DialogResult.OK Then
  7.             For i = 0 To 30000
  8.                 ed.WriteMessage(vbLf & "i={0}", i)
  9.             Next
  10.         End If
  11.     End Sub
问题:点击确定按钮后,对话框直到命令函数执行完成才消失。VBA中用DoEvents方法可以实现,VB.NET中DoEvents方法不起作用。如果Click事件加上Me.Hide,则命令执行时很多界面元素时不显示,也不行。
怎么才能让对话框即时关闭不延迟?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-1-19 17:32:00 | 显示全部楼层
  1.      _
  2.     Public Sub Test2()
  3.         Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  4.         Dim ed As Editor = doc.Editor
  5.         Dim res As Windows.Forms.DialogResult
  6.         Using Dlg As New Form1()
  7.             res = Application.ShowModalDialog(Dlg)
  8.         End Using
  9.         If res  Windows.Forms.DialogResult.OK Then Return
  10.         ed.UpdateTiledViewportsFromDatabase()
  11.         For i = 0 To 30000
  12.             ed.WriteMessage(vbLf & "i={0}", i)
  13.         Next
  14.     End Sub
回复

使用道具 举报

13

主题

84

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2011-1-19 20:30:00 | 显示全部楼层
测试了一下,UpdateTiledViewportsFromDatabase虽然能立即关闭对话框,却导致一次重新生成,不可行。另外,Using语句好像专门用于对非托管资源的调用,用在Form类型上应该不起作用吧。
前面同样的代码,在WIN XP中有延迟,在WIN  7中就没有,看来和平台有关。.NET API里应该有解决办法,只是一时找不到。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-1-19 20:48:00 | 显示全部楼层
Using用于IDispose接口
估计只有在.Net里找?或者调用Api?未知
NetAPi应该没有解决方案?
回复

使用道具 举报

18

主题

177

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
249
发表于 2012-4-30 19:01:00 | 显示全部楼层
今天,也遇到这个问题。转了几道弯才算凑付过去。
回复

使用道具 举报

17

主题

69

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2013-12-31 15:28:00 | 显示全部楼层

这个问题如何解决的呢,请教一下!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 23:41 , Processed in 0.560491 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表