当前位置: 代码迷 >> VB Dotnet >> [vb.net] Task上调用ProgerssBar进度条的有关问题
  详细解决方案

[vb.net] Task上调用ProgerssBar进度条的有关问题

热度:58   发布时间:2016-04-25 02:12:37.0
[vb.net] Task上调用ProgerssBar进度条的问题

下面代码运行发生错误提示;
错误提示为<其他信息: 线程间操作无效: 从不是创建控件“ProgressBar1”的线程访问它。>
如何成功嗲用进度条呢呢



Public Class Class1


    Private ProgressBar1 As ProgressBar
    Public Property NewProperty() As ProgressBar
        Get
            Return ProgressBar1
        End Get
        Set(ByVal value As ProgressBar)
            ProgressBar1 = value
        End Set
    End Property


    Public Async Sub MySub()
        ProgressBar1.Minimum = 1
        ProgressBar1.Maximum = 10
        Dim Task1 As Task(Of Integer) = Task(Of Integer).Factory.StartNew(Function()
                                                                              For index1 As Integer = 1 To 10
                                                                                  ProgressBar1.Value = index1
                                                                                  Task.Delay(1000)
                                                                              Next
                                                                              Return 0
                                                                          End Function)
        Dim r As Integer = Await Task1
    End Sub

End Class

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim Cla1 As New Class1
        Cla1.NewProperty = Me.ProgressBar1
        Cla1.MySub()
    End Sub
End Class

------解决方案--------------------
线程中不允许访问ui线程的控件,你要定义个委托,然后用me.Invoke来调用委托
------解决方案--------------------
跨线程调用控件时,可以使用下面的语句 
ProgressBar1.Invoke(Sub()
         ProgressBar1.Value = index1
 End Sub)
------解决方案--------------------
thread都不会就用task……真是无知者无畏
------解决方案--------------------
引用:
Quote: 引用:

跨线程调用控件时,可以使用下面的语句 
ProgressBar1.Invoke(Sub()
         ProgressBar1.Value = index1
 End Sub)


上面我的代码中的情况时如何调用呢

先学习下复制粘贴吧。
------解决方案--------------------
简单方案(不安全)
CheckForIllegalCrossThreadCalls = false
  相关解决方案