.net而崩溃时,松散的焦点WIN7 [英] .net while crash when loose focus win7

查看:359
本文介绍了.net而崩溃时,松散的焦点WIN7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用.net lang,
windows 10 的visual studio中创建了一个文件搜索程序。我的问题从form1开始,并带有一个 dim frm2 as form2 =新的form2 调用,
后,新的窗体显示我开始一个while循环form1,将数据馈送到表单2中的列表框:


<1> form1调用form2并显示它。
$ b 2)form1开始一个while循环

3)在while循环内部数据被馈送到frm2中的listbox1

现在,所有的工作都在 window 10 ,while循环可以运行尽可能多的,没有任何麻烦,窗口可以松散焦点和重新获得焦点没有显示任何不响应。 。msgs或white \ black screen ..



当我把软件带给我的朋友运行Windows 7的计算机,安装所有必需的框架和Visual Studio本身,运行它在调试模式下输入.sln,然后在同一个文件夹中搜索结果:

lockquote
1 p < while循环运行平稳,只要表单2不松散焦点
(在Windows 10上没有发生的事情)

2)当我点击屏幕上的任何地方软件松散的焦点是什么
导致1)
发生(黑屏\白屏\不响应等)。 b
$ b

3)如果我等待循环所需的时间,不要点击其他任何地方
它会一直运行, strong>更新标签就像它应该发现
的文件量,甚至可以 100%成功完成循环
(再次除非我点击某处)

代码示例:

  Sub ScanButtonInForm1()
Dim frm2 As Form2 = New Form2
frm2.Show()
Dim AlreadyScanned As HashSet(Of String)= New HashSet(Of String)
Dim stack As New Stack(Of String)
stack.Push(... Directoy从...开始搜索)
Do(stack.Count> 0)
frm2.Label4.Text = - 映射文件... - 文件夹左:+ stack.Count.ToString + - 找到的文件:+ frm2.ListBox1.Items.Count.ToString + -
frm2.Label4.Refresh()
Dim ScanDir As String = stack.Pop
If AlreadyScanned.Add(ScanDir)Then
Try
Try
尝试
Dim directoryName As String
对于每个directoryName在System.IO.Directory.GetDirectories(ScanDir)
stack.Push(directoryName)
frm2.Label4.Text = - 映射文件... - 文件夹左:+ stack.Count.ToString + - 找到的文件:+ frm2.ListBox1.Items.Count.ToString + -
frm2。 Label4.Refresh()
Next
frm2.ListBox1.Items.AddRange(System.IO.Directory.GetFiles(ScanDir,*。*,System.IO.SearchOption.AllDirectories))
捕获ex5作为UnauthorizedAccessException
结束尝试
捕获ex2作为System.IO.PathTooLongException
结束尝试
捕获ex4作为System.IO.DirectoryNotFoundException
结束尝试
End If
Loop
End Sub

我的结论很简单! b
$ b


1) windows 7 不支持从while循环进行实时UI(标签)更新
从一个按钮调用...

2)windows 7可能支持一个新的
线程运行相同的循环

我想mabye如果我运行一个线程中的所有代码mabye ui将保持响应


通过UI在 windows 10 中没有响应的方式,但我仍然看到
标签刷新和在形成松散焦点时没有任何崩溃..
)

所以线程将需要用数据更新外部文件,form2将需要从文件中读取数据,但是它会造成同样的问题吗?我不知道该怎么办..可以使用一些帮助和提示。 谢谢!


我必须指出循环正在进行的事实窗户10没有一个响应式用户界面意味着我不能点击任何按钮,但我可以
仍然看到标签刷新但在Windows 7上的一切工作相同
除非我点击某处,无论我点击Windows循环
崩溃
$ b $使用框架4.6.2开发者


解决方案

尽管我很高兴找到了解决方案,但我建议不要使用 Application.DoEvents(),因为 这是不好的做法



请参阅以下博文: 保持您的用户界面响应和应用程序的危险。 DoEvents



简单地说, Application.DoE vents()是一个肮脏的解决方法,使您的UI看起来很敏感,因为它迫使UI线程处理所有当前可用的窗口消息。 WM_PAINT 是这些消息之一,这就是为什么你的窗口重新绘制。



然而,这有一些背面。 。例如:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆