|
|
1
1
问题的一部分是您正在从后台线程直接访问UI元素。田野
|
|
2
2
无法从backgroundWorker1“DoWork”事件直接访问progressBar1(或任何其他UI元素),必须使用backgroundWorker1.ProgressChanged方法并处理ProgressChanged事件:
WorkerReportsProgress应指定为true 并且progress事件更改为以下方法
|
|
|
3
0
因此,当我开始学习如何制作响应性应用程序时,我遇到了函数:Application.DoEvents() (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx)
i、 e.在点击事件处理程序中
现在,这是回到前网络时代,它一直存在到现在,但是,这不是你应该掉以轻心的事情。如果您单击窗体上的另一个按钮,它将启动另一个线程,该线程将尝试执行,如果您不小心,将导致窗体上出现线程异常。一些开发人员会告诉您不使用此功能,但既然您刚开始使用,我会说尝试一下:) 根据应用程序的不同,我可能不会使用此方法。相反,我要做的是创建几个处理“序列”;系统拥有的每个cpu核心一个。我将要扫描的IP添加到队列对象,然后启动2到4个线程实例( http://msdn.microsoft.com/en-us/library/system.threading.thread.aspx http://msdn.microsoft.com/en-us/library/ms171728.aspx )在我的表单上,我会相应地更新UI的信息。 线程是有趣的,伙计:)随着时间的推移,你会发现你可以使用MSMQ来制作一个系统,该系统使用其他计算机的多核来完成诸如图像处理(或带有pa的东西……) |