为何 在循环中加入了DoEvents,cpu依然占用100%
为什么 在循环中加入了DoEvents,cpu依然占用100%
环境vs2012, .net Farmework 4.0
新建一个工程,窗体代码如下
问题
为什么 在循环中加入了DoEvents,cpu依然占用100%
谢谢
如果我这个循环是为了检测一个值是否达到条件,达到条件则继续之后的代码.没达到条件则一直卡在这个循环中,应该如何写呢?
我当前的代码是这样的
------解决方案--------------------
DoEvents应该是循环的间隙,处理下消息。所以CPU占有率还是很高。
------解决方案--------------------
Thread.Sleep(100)
------解决方案--------------------
这种费力气的事情,请新开一个线程去处理,并且在线程里适当Sleep,这样不会影响UI响应,数据处理完毕时,通过Dispatcher传回UI线程来进行显示。
------解决方案--------------------
等待直到另一个线程结束后再继续后续动作,可使用线程中的WaitOne()方法。VS帮助当中有相关示例如下:
环境vs2012, .net Farmework 4.0
新建一个工程,窗体代码如下
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Do
Application.DoEvents()
Loop
End Sub
End Class
问题
为什么 在循环中加入了DoEvents,cpu依然占用100%
谢谢
如果我这个循环是为了检测一个值是否达到条件,达到条件则继续之后的代码.没达到条件则一直卡在这个循环中,应该如何写呢?
我当前的代码是这样的
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Do
if (一个判断条件的表达式) then exit do
Application.DoEvents()
Loop
'这里是之后的代码
End Sub
End Class
------解决方案--------------------
DoEvents应该是循环的间隙,处理下消息。所以CPU占有率还是很高。
------解决方案--------------------
Thread.Sleep(100)
------解决方案--------------------
这种费力气的事情,请新开一个线程去处理,并且在线程里适当Sleep,这样不会影响UI响应,数据处理完毕时,通过Dispatcher传回UI线程来进行显示。
------解决方案--------------------
等待直到另一个线程结束后再继续后续动作,可使用线程中的WaitOne()方法。VS帮助当中有相关示例如下:
Public Class WaitOne
Shared autoEvent As New AutoResetEvent(False)
<MTAThread()> _
Shared Sub Main()
Console.WriteLine("Main starting.")
ThreadPool.QueueUserWorkItem(AddressOf WorkMethod, autoEvent)
' Wait for work method to signal.
autoEvent.WaitOne()
Console.WriteLine("Work method signaled.")
Console.WriteLine("Main ending.")
End Sub
Shared Sub WorkMethod(ByVal stateInfo As Object)
Console.WriteLine("Work starting.")
' Simulate time spent working.
Thread.Sleep(New Random().Next(100, 2000))
' Signal that work is finished.
Console.WriteLine("Work ending.")
CType(stateInfo, AutoResetEvent).Set()
End Sub
End Class