日期:2014-05-17  浏览次数:20905 次

c# 异步更新UI,如何得知结束
现在的功能是,开辟一个新线程用来拷贝文件,要实时的更新UI上的进度条和Label
代码
VB code
        Dim t As Thread = New Thread(New ParameterizedThreadStart(AddressOf CopyFiles))
        t.IsBackground = True
        t.Start(fileList)

    Private Sub CopyFiles(ByVal myList As List(Of String))
                    拷贝文件代码
                    '线程切换更新UI线程UI的值
                    Me.BeginInvoke(New MyDelegate(AddressOf UpdateInfo), fileNowInt, srcfileName)
                    Thread.Sleep(2000)
                End If
            Catch
                Continue For
            End Try
        Next
    End Sub

    Private Sub UpdateInfo(ByVal cnt As Integer, ByVal fileName As String)
        pbUpdate.Value = cnt
        lblUpdateFile.Text = fileName
        lblUpdateFileCount.Text = String.Format("{1}/{0}", updateFileList.Count, cnt)
    End Sub




不知道我这样的写法对不对?但是目前还有个问题,我如何判断开辟的线程执行完毕???
我如何给UI线程发出个信号?让我去更新UI

------解决方案--------------------
探讨
不知道我这样的写法对不对?但是目前还有个问题,我如何判断开辟的线程执行完毕???
我如何给UI线程发出个信号?让我去更新UI

------解决方案--------------------
用回调方法
------解决方案--------------------
这个.net里有准备好的类。BackgroundWorker

WorkerReportsProgress 获取或设置一个值,该值指示 BackgroundWorker 能否报告进度更新。 
MSDN:ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_system/html/9048f467-4ff1-872c-d0fd-8a3c618f0178.htm

 看看有没有用。
------解决方案--------------------
把Thread换成Action的实例 然后这个实例.BeginInvoke这个函数里有回调方法 这个回调触发的时候就是线程执行完毕的时候 在回调方法里写下面的逻辑如:更新UI
------解决方案--------------------
菜鸟建议用 backgroundworker