多线程问题

时间:2011-04-13 14:12:30

标签: .net multithreading

场景: -

您有一个从不同服务器获取订阅源(数据)的应用程序。您的应用程序正在为每个服务器维护多个线程(以获取订阅源)以及一个用于GUI的线程。 您的GUI在另一个线程中运行了三个进度条(每个服务器一个)。

问题: -

如果CPU忙于获取Feed,每次从任何服务器收到Feed时,如何刷新进度条。

约束: -

不允许更改体系结构或接口。 GUI线程不可用于服务器线程。

1 个答案:

答案 0 :(得分:0)

严格地说,这些约束可以在ProgressBar.BindingContext上使用DataBinder并将其绑定到具有progress值的自定义类,此自定义类实现INotifyPropertyChanging接口。然后设置三个静态变量,每个变量对应您设置的每个数据绑定(每个进度条一个)。然后只是提供静态变量的值。

请参阅:http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanging.aspx

其他选项是使用委托,它不需要引用产生控件的线程,通常它们似乎是处理多线程和ui更新的首选方法(例如在vb.net中因为) :

protected delegate sub updateProgressdelegate(ByVal control As ProgressBar, byVal value as integer)

protected shared sub updateProgress(ByVal control As ProgressBar, byVal value as integer)
    if(control.invokeRequired) then
        control.invoke(new updateProgressDelegate(addressof updateprogress), control, value)
        exit sub
    end if
    control.value = value

    'these aren't really needed but some people like to do them...
    control.invalidate()
    control.refresh()
end sub

查看代理信息: http://msdn.microsoft.com/en-us/magazine/cc301810.aspx

此外,如果家庭作业然后只是用作业标记它,如果'考试学习'然后尝试标记,诚实得到你更多的答案。如果不是家庭作业问题,那么提供代码样本,也许不要像在家庭考试中那样格式化问题。