当前位置 : 主页 > 编程语言 > c语言 >

vb.net – 被触发的异步事件

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在编写一个同时运行多个线程的应用程序. 每个线程与Web服务器通信并下载不同数量的数据. 我想显示应用程序中所有线程的总进度. 每个线程每下载1兆字节就会引发一个事件: R
我正在编写一个同时运行多个线程的应用程序.
每个线程与Web服务器通信并下载不同数量的数据.
我想显示应用程序中所有线程的总进度.

每个线程每下载1兆字节就会引发一个事件:

RaiseEvent My_Event(Size_Downloaded as double,Total_Size as double)

有没有办法显示主窗体中下载的总数而不会出现跨线程错误?

它不一定是瞬间的,所以计时器可能有效吗?

您可以更改事件签名并添加线程的ID
并使用计时器显示节目总数

Dim _info As New ConcurrentDictionary(Of Integer, DLoadInfo)

Sub MyEvent(id As Long, Size_Downloaded As Double, Total_Size As Double)

    Dim v = New DLoadInfo() With 
        {
            .SizeDownloaded = Size_Downloaded, 
            .TotalSize = Total_Size
        }

    _info.AddOrUpdate(id, v,
            Function(key, oldValue)
                Return v
            End Function
         )
End Sub

Private Sub TimerDisplay_Tick(sender As Object, e As EventArgs)
    Dim sizeDownloaded, totalSize As double
    For Each o As DLoadInfo In _info.Values
        sizeDownloaded += o.SizeDownloaded
        totalSize += o.TotalSize
    Next
    TextBoxSizeDownloaded.Text = sizeDownloaded 
    TextBoxTotalSize.Text = totalSize 
End Sub

Class DLoadInfo
    Public property SizeDownloaded As Double
    Public property TotalSize As Double
End Class
网友评论