我們正在製作一個程序,從ftp服務器下載並上傳一個xml(最大500kb)文件。我們需要製作一個上傳屏幕。我們嘗試了三種方法。在第一種方法中,我們使用了一個.gif文件,該文件顯示了我們在圖片框中放置的加載屏幕。之後,在我們處理上/下載函數之前,我們使圖片框可見,並且當函數完成時,我們使其不可見。但是,這並不工作:(這裏是代碼:上傳屏幕winforms c#
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;
它說的是這樣的:「你不能也稱這個bla bla ...」。我不記得也刪除了代碼,因此對於缺少的信息感到抱歉。
最後,我們TRED使用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文件具有無效值「」更新」 :」。 path.xml2中的非法字符
有沒有人知道編程加載屏幕的正確方法?
如果你需要更多的細節,我一定能回答你的問題。