ftpサーバーからxml(最大500kb)ファイルをダウンロードしてアップロードするプログラムを作っています。アップロード画面を作る必要があります。3つの方法を試しました。最初の方法では、画像ボックスに入れたロード画面を示す .gif ファイルを使用しました。その後、アップ/ダウンロード機能を処理する前に画像ボックスを表示し、機能が終了したら非表示にします。しかし、うまくいきませんでした:(コードは次のとおりです。
private void button2_Click(object sender, EventArgs e)//upload button
{
picturebox1.visible=true; //.gif file
upload();
picturebox1.visible=false;
}
アップロード機能は次のとおりです。
void upload()
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://" + IP + ":" + Port + downdest + xmlfile);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
//Load the file
FileStream stream = File.OpenRead("apartman.xml");
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Close();
//Upload file
Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
}
このコードを使用すると、アップロードは機能しますが、画像は表示されません。アップロード コードが機能していない場合、ロード画面も表示されません。
次に、マルチスレッド化を試みましたが、c# では、このコードを別のスレッドで使用することはできません。
picturebox1.visible=true;
「これをブラブラと呼ぶことはできません...」のようなものです。私は覚えていないし、コードも消去したので、情報が不足していて申し訳ありません。
最後に、backgroundworker を使用してみました。コードは次のとおりです。
public Form1()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)//upload button
{
backgroundWorker1.RunWorkerAsync();
}
private void upload()
{
backgroundWorker1.ReportProgress(i);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//upload
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("upload complete");
}
このコードでは、次のようなエラー メッセージも表示されます。
エラー 1 ファイルに無効な値 ""updates":" があります。path.xml2 の不正な文字
ロード画面をプログラミングする正しい方法を知っている人はいますか?
詳細が必要な場合は、ご質問に確実にお答えします。