1

ファイルをダウンロードし、Windows ベースのマシンで古いファイルを置き換えるプログラムがあります。

ボタンを押してファイルをダウンロードするたびに実行される 2 つのバックグラウンド ワーカーがあります。1 つのバックグラウンド ワーカーが、新しいファイルの SFTP ダウンロードを実際に実行します。他のバックグラウンド ワーカーは、ダウンロードの進行状況を判断するために、ダウンロードされたファイル サイズを毎秒読み取るだけです。

私が抱えている問題は、文字通り半分のマシンで、ダウンロードの進行状況が表示されないことです。それでもダウンロードは続きます。2 台のコンピューターで同じプログラムを実行すると、一方のコンピューターではダウンロードの進行状況が表示され、もう一方のコンピューターでは表示されない理由がわかりません。

 // This thread will handle monitoring the downloaded BioR.mdb file size
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {           
        BackgroundWorker worker = sender as BackgroundWorker; // necessary

        do // continue reporting file size until the file has finished downloading
        {
            Thread.Sleep(1000); // report once per second

            long file_size = new FileInfo(@"C:\BioERemote\BioR.mdb").Length; // get file size
            worker.ReportProgress(Convert.ToInt32(file_size)); // "worker" reports the file size to ProgressChanged event
        } while (!is_complete); // is_complete becomes true when backgroundworker2 completes the download          
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        label2.Text = Convert.ToString(Math.Round((Convert.ToDouble(e.ProgressPercentage) / Convert.ToDouble(remote_size)) * 100.0, 2)) + "% Downloaded";
    }

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        label2.Text = "";
    }

    private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
    {
        using (var client = new SftpClient(sftp_address, sftp_username, sftp_password))
        {
            client.Connect();
            DownloadDirectory(client, bioe_remote_source, local_remote_destination);
            client.Disconnect();
        }

        is_complete = true;
    }

    private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {            
        label_Status.ForeColor = Color.Green;
        label_Status.Text = "Completed! You may use Remote.";
    }        
4

2 に答える 2

-1

.NET のバージョンがマシン上で最新であることを確認することから始めます。

于 2017-02-01T20:17:01.167 に答える