首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 异步更新UI,怎么得知结束

2012-10-16 
c# 异步更新UI,如何得知结束现在的功能是,开辟一个新线程用来拷贝文件,要实时的更新UI上的进度条和Label代

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

热点排行