none
怎么在另一个窗体上显示上传数据时的进度条?我想用多线程使用! RRS feed

  • 常规讨论

  • 大家好。我刚学VB.net不久。

    我在主程序中有一个上传按钮,点击【上传】按键后就会打开进度条显示的别一个窗体B,(B窗体中有一个进度条,一个取消按键,一个LABEL。)并上传数据到数据库里,同时进度条显示上传的进度,LABEL显示上传的数值结果。如果点【取消】就会终止。

    我已经把上传数据这部分写出来了,也大概写出多线程的代码,但搞了两天,查了很多的资料都没有办法搞好。

    请大家帮我看看,是那里出问题了?我的代码应该怎么改?下面是我的代码 部分:

    【【【【【【【【【【这是放有进度条的窗体B】】】】】】】】】】】】】】】】】】
    
    
    
    Public Class FrmJingDutiao
    
     Public Sub New()
    
      InitializeComponent()
    
    
    
      '开另一个进程做循环并设置ProgressBar的值
    
      TreadOne = New Threading.Thread(AddressOf UpDataToData)
    
      TreadOne.Start()
    
     End Sub
    
    
    
    
    
     Public Sub SetProgress(ByVal currentl, ByVal total)
    
      Dim JingDuvalue As Double '进度条显示值
    
      ProgressBar1.Maximum = total
    
      Me.ProgressBar1.Minimum = 0
    
      Me.ProgressBar1.Step = 10
    
    
    
      If currentl < MaxNum Then
    
       ProgressBar1.Value = currentl
    
       JingDuvalue = Format$(ProgressBar1.Value / total * 100, "0.0")
    
       LblJingDu.Text = "操作进度: " & ProgressBar1.Value & "/" & total & " (" & JingDuvalue & "%)"
    
       Application.DoEvents()
    
      Else
    
       TreadOne.Abort()
    
       MsgBox("数据上传完毕!", MsgBoxStyle.OkOnly, "提示信息")
    
       Exit Sub
    
      End If
    
    
    
     End Sub
    
     Public Sub UpDataToData()
    
      'On Error Resume Next
    
      Dim i As Integer
    
      MaxNum = UBound(PayLine)
    
    
    
      i = 0
    
      For i = 0 To UBound(PayLine)
    
       PayColumn = Split(PayLine(i), "---")
    
       Call UpLoadLvwDataShow("Data", PayColumn) '上传数据
    
       i = i + 1
    
       NewValue += 1
    
       Application.DoEvents()
    
       Me.Invoke(New SetProgressDelg(AddressOf SetProgressBarValue), i)
    
       Threading.Thread.Sleep(200)
    
      Next i
    
    
    
     End Sub
    
     Public Delegate Sub SetProgressDelg(ByVal value As Integer, ByVal total As Integer)
    
    
    
     Public Sub SetProgressBarValue(ByVal value As Integer, ByVal total As Integer)
    
      Dim JingDuvalue As Double '进度条显示值
    
      ProgressBar1.Maximum = total
    
      ProgressBar1.Value = value
    
      JingDuvalue = Format$(ProgressBar1.Value / total * 100, "0.0")
    
      LblJingDu.Text = "操作进度: " & ProgressBar1.Value & "/" & total & " (" & JingDuvalue & "%)"
    
     End Sub
    
     Private Sub ButCannel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButCannel.Click
    
      FrmDataMaster.ButImport.Enabled = True '使用导入键可用
    
      TreadOne.Abort()
    
     End Sub
    
    
    
    End Class
    
    
    
    【【【【【【【【【【【【【【【【【【这是我主程序上的上传按键的代码 】】】】】】】】】】】】】】】】】】】】】】】】】】
    
    
    
     Private Sub ButImport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButImport.Click
    
      'On Error Resume Next
    
      ButImport.Enabled = False '使用导入键不可用
    
      Control.CheckForIllegalCrossThreadCalls = False
    
    
      OpenFileDialog1.Filter = "*.TxT|*.*"
    
      OpenFileDialog1.RestoreDirectory = True
    
      If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
    
       PayTxtPath = OpenFileDialog1.FileName.Trim
    
    
       If PayTxtPath <> "" Then
    
        'Call ShowPayToListView() '把读取到的文本数据输出到ListView显示出来
    
        '读取文本文件内的数据,并放入数组
    
        Call PayTxtRead(PayTxtPath)
    
        TreadTwo = New Threading.Thread(New Threading.ThreadStart(AddressOf FrmProShow))
    
        TreadTwo.Start()
    
    
    
       End If
    
      End If
    
    
    
    
    
     End Sub
    
    
    
     '这里调用进度条的窗体B实例化
    
     Sub FrmProShow()
    
      Dim ThreaProgress As New FrmJingDutiao
    
      Application.DoEvents()
    
      ThreaProgress.Show()
    
     End Sub
    
    
    
    
    
    

     这样会出问题,有进度条的窗体B也不会显示出来,进度条也不会前进,

    而且报错的是: Me.Invoke(New SetProgressDelg(AddressOf SetProgressBarValue), i)【调用方法时发生错误。目标线程不再存在。】这是错误提示。

     

    大家帮我看看。谢谢!

    2011年2月3日 8:27

全部回复

  • Me.Invoke(New SetProgressDelg(AddressOf SetProgressBarValue), i)【参数计数不匹配。】

    我调整了一下,还是出错。:参数计数不匹配。


    快快乐乐
    2011年2月3日 8:54
  •  哦。

     

    我已经解决了。

    谢谢大家了。

    再祝大家新年快乐,

    每次解决了一个问题,都很有成就感。

     


    快快乐乐
    2011年2月3日 9:55
  • 大家好。

    有一个新的问题。

    我把主程序中的上传按钮点击后改不可用 了。这样一来,等我的进度条结束后,线程结束后,这个上传按钮没有办法恢复为可用呀。

     

    我应该在那里把这个按钮改过来 ?FrmDataMaster.ButImport.Enabled = True这句应该放在那里?或者另一个写法?谢谢!


    快快乐乐
    2011年2月3日 12:28
  • 怎么解决的?分享一下嘛~
    2011年2月6日 7:02
  • UpDataToData 最后在Me.Invoke去FrmDataMaster.ButImport.Enabled = True
    http://feiyun0112.cnblogs.com/
    2011年2月7日 1:21
    版主