我正在尝试在我正在开发的应用程序中使用 .NET Backgroundworker 对象。
互联网上的所有资料都说该对象在“后台”运行,但我无法确认该后台线程确实以“低优先级”模式运行。出现这个问题是因为在 Windows(我假设)中,后台任务可以在“正常”或“低于正常”或“低”优先级模式下运行。
在我的应用程序中,我尝试通过调用 ...
Thread.CurrentThread.Priority=ThreadPriority.Lowest
...
但这似乎没有效果。后台工作人员是否忽略此调用?
我想再解释一些:
我的应用程序是一个互联网客户端,它从室内收集有关温度、湿度等的实时数据,并使用
system.net.webclient.UploadValuesAsync(...)
来电
我已经编写了应用程序,以便客户端 GUI 从腔室收集数据,为它们加上时间戳,然后将它们排队等待上传,就像这样
...
Synclock objlock
debug.print("Queueing reading...")
dataQ.Enque(reading)
End Synclock
...
backgroundworker 的 Dowork 函数出列,然后像这样上传......
.....................
Do
if dataQ.count() <> 0 then
Synclock objlock
reading = dataQ.DeQue()
End Synclock
Dim client As New System.Net.WebClient
...put the reading in NameValueCollection and upload to server page
req = new NameValueCollection
...
...
client.UploadValuesAsync(uri, "POST", req)
endif
thread.sleep(1) 'without this line the CPU usage goes upto 100% and seems to slow other tasks!
Loop
......
当我运行程序时,我发现每当调用 UploadValuesAsync 时,调试窗口就会停止。我还添加了调试语句以随时查看队列中有多少读数。如果此任务真正以低优先级运行,我希望看到队列计数在获取数据时迅速增加,然后仅在前台空闲且未获取数据时减少。但这种情况并非如此。一旦将读数添加到队列中,它就会出列并上传。因此队列计数始终为 1 或 0!
我的方法有问题吗?我根本不应该使用后台工作者对象吗?
顺便说一句,这是在运行 Windows XP 的双核笔记本电脑中。