当ftp离线时,程序的旧进程会保留

时间:2013-07-31 13:42:02

标签: vb.net multithreading file-upload timer ftp

我有一个程序会偶尔重启自己。该程序使用一个计时器启动一个线程,将文件从文件夹上传到我的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

1 个答案:

答案 0 :(得分:1)

尝试使用FTPup.IsBackground = True这会让线程属于该应用,应关闭该应用关闭。