模拟Application.DoEvents()在Windows独立应用程序中的作用的最佳做法是什么?
我有一个vb.net网络应用程序,并且有一个页面,其中包含执行以下操作的按钮:
(按钮点击)
子(按钮点击)
隐藏包含刚刚点击的按钮的asp.panel
在db中插入记录
EmailPeople()
End Sub
Sub EmailPeople()
发送电子邮件给1个或更多人
结束子
单击时,电子邮件子程序会暂停5-6秒,然后面板消失。我希望面板立即消失,这样用户就不会继续按下mash并将额外的记录插入数据库......
么?
由于
答案 0 :(得分:0)
Application.DoEvents是邪恶的,并且没有理由使用它。并且永远不会有理由使用它。
你可以创建一个自己的线程(异步函数),(正如Chris Fannin所说),你可以将逻辑移到web服务中并发出ajax请求。
另外.Net 4.5有一个名为SendMailAsync(System.Net.Mail)的方法
这个样本可以帮助您朝着正确的方向前进: Send Mail with Background Thread
答案 1 :(得分:0)
有时在Web应用程序中,您可能有一个带有“繁忙循环”(游戏开发人员的术语)的后台作业,该作业需要进行大量计算,并且您可能担心它将CPU锁定在100%,从而阻止了其他所有程序的运行在那台机器上
如果是这种情况,请在长时间运行的循环中使用Thread.Yield
https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.yield?view=netcore-3.1