none
Web Service 多執行緒 無法下載成功 RRS feed

  • 問題

  • 有三個檔案要下載,想試試看多執行續會不會比較快 可是不一定就是會有一個檔案無法下載成功

       Private Sub btn_download_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_download.Click

            If MessageBox.Show("下載檔案", "下載", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.No Then
                Exit Sub
            End If


            Me.Enabled = False
            Cursor.Current = Cursors.WaitCursor

            Dim myDldCls As New DownloadFile

            Dim Thread1 As New System.Threading.Thread(AddressOf myDldCls.download1)
            Dim Thread2 As New System.Threading.Thread(AddressOf myDldCls.download2)
            Dim Thread3 As New System.Threading.Thread(AddressOf myDldCls.download3)

            AddHandler myDldCls.Finish1, AddressOf mycallback1
            AddHandler myDldCls.Finish2, AddressOf mycallback2
            AddHandler myDldCls.Finish3, AddressOf mycallback3
            mystatus = 0

            Thread1.Start()
            Thread2.Start()
            Thread3.Start()

            '====程序的都會成功
            'Try
            '    ws.Timeout = 100000
            '    ws.Url = WebServiceURL
            '    ds_Cust = ws.rv_Cust("")
            '    ds_Cust.Tables(0).WriteXml(App_path + "\cust.xml")

            '    ds_FixProduct = ws.rv_Fixitem("")
            '    ds_FixProduct.Tables(0).WriteXml(App_path + "\product.xml")



            '    ds_FixRemark = ws.rv_Fix_Remark("")
            '    ds_FixRemark.Tables(0).WriteXml(App_path + "\Fix_Remark.xml")



            '    MessageBox.Show("下載成功")
            'Catch ex As Exception
            '    MessageBox.Show(ex.ToString)
            'End Try

            Cursor.Current = Cursors.Default
            Me.Enabled = True
        End Sub

        Private Sub mycallback1(ByVal myid As Integer)
            mystatus += myid
            If mystatus = 6 Then
                MessageBox.Show("下載成功")
            End If
        End Sub

        Private Sub mycallback2(ByVal myid As Integer)
            mystatus += myid
            If mystatus = 6 Then
                MessageBox.Show("下載成功")
            End If
        End Sub

        Private Sub mycallback3(ByVal myid As Integer)
            mystatus += myid
            If mystatus = 6 Then
                MessageBox.Show("下載成功")
            End If
        End Sub




        Private Class DownloadFile
            Public Event Finish1(ByVal id As Integer)
            Public Event Finish2(ByVal id As Integer)
            Public Event Finish3(ByVal id As Integer)

            Private mytimeout As Integer = 100000

            Public Sub download1()
                Try
                    Dim ws1 As New PDA_Service.Service1
                    ws1.Timeout = mytimeout
                    ws1.Url = WebServiceURL
                    ds_Cust = ws1.rv_Cust("")
                    ds_Cust.Tables(0).WriteXml(App_path + "\cust.xml")
                    RaiseEvent Finish1(1)
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            End Sub

            Public Sub download2()
                Try
                    Dim ws2 As New PDA_Service.Service1
                    ws2.Timeout = mytimeout
                    ws2.Url = WebServiceURL
                    ds_FixProduct = ws2.rv_Fixitem("")
                    ds_FixProduct.Tables(0).WriteXml(App_path + "\product.xml")
                    RaiseEvent Finish2(2)
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            End Sub

            Public Sub download3()
                Try
                    Dim ws3 As New PDA_Service.Service1
                    ws3.Timeout = mytimeout
                    ws3.Url = WebServiceURL
                    ds_FixRemark = ws3.rv_Fix_Remark("")
                    ds_FixRemark.Tables(0).WriteXml(App_path + "\Fix_Remark.xml")
                    RaiseEvent Finish3(3)
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            End Sub

        End Class


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....


    2012年12月5日 下午 02:44

解答

  • 程式中的三個執行緒都會執行

    mystatus += myid

    所以應該管制一下mystatus 變數的存取, 沒有管制的話, 有可能是變數內容值計算錯誤, 而不是檔案沒有下載成功

    2012年12月6日 上午 05:40

所有回覆

  • 程式中的三個執行緒都會執行

    mystatus += myid

    所以應該管制一下mystatus 變數的存取, 沒有管制的話, 有可能是變數內容值計算錯誤, 而不是檔案沒有下載成功

    2012年12月6日 上午 05:40
  • 小弟電腦的問題,導致網路連線斷斷續續,上面寫的後來測試都沒有問題,感謝指導


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2012年12月7日 下午 07:07