0

たまに再起動するプログラムがあります。このプログラムは、フォルダーから ftp サーバーにファイルをアップロードするスレッドを開始するタイマーを使用します。しかし、ftp サーバーがダウンすると、プログラムは必要に応じて再起動しますが、古いプロセスは終了せず、タスク マネージャーに残ります。ftp が復旧すると、プロセスの終了が開始されます。

この問題は、ftp サーバーがオンラインの場合には発生しません。

FTP サーバーがオフラインのときにプロセスが停止する原因は何ですか?

使用するプログラムを再起動するにはApplication.Restart()

現在のコード:

Public Sub UploadToFTP()
    Dim request = DirectCast(WebRequest.Create(FtpAdress), FtpWebRequest)
    request.Credentials = New NetworkCredential(_UserName, _Password)
    request.Method = WebRequestMethods.Ftp.ListDirectory
    Try
        Using response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
            Try
                Dim _FromPath As String
                Dim _ToPath As String
                Dim Dt As New DataTable
                Dim flag As Boolean = False

                'Create a link to an FtpServer
                Dim ftp As New FTPclient(_HostName, _UserName, _Password)
                Dim _dir As New DirectoryInfo(sourceDir)
                ' Upload multiple files
                For Each _file As FileInfo In _dir.GetFiles("*.*")
                    _FromPath = sourceTxt + _file.Name
                    _ToPath = "/UploadedData /" + _file.Name
                    'upload a file
                    flag = ftp.Upload(_FromPath, _ToPath)
                    '' file uploaded then delete
                    If flag Then
                        _file.Delete()
                    End If
                Next
            Catch ex As Exception
            End Try
        End Using
    Catch ex As WebException
        Dim response As FtpWebResponse = DirectCast(ex.Response, FtpWebResponse)
        'Does not exist
        If response.StatusCode = FtpStatusCode.ActionNotTakenFileUnavailable Then
        End If
    End Try
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    FTPup = New System.Threading.Thread(AddressOf UploadToFTP)
    FTPup.Priority = ThreadPriority.AboveNormal
    FTPup.Start()
End Sub
4

1 に答える 1

1

これを使用してみるFTPup.IsBackground = Trueと、スレッドがアプリに属し、アプリを閉じる必要があります。

于 2013-07-31T14:08:51.063 に答える