我们正在制作一个从 ftp 服务器下载和上传 xml(最大 500kb)文件的程序。我们需要制作一个上传屏幕。我们尝试了三种方法。在第一种方法中,我们使用了一个 .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;
它说的是:“你不能也称它为bla bla ...”。我不记得了,也删除了代码,很抱歉缺少信息。
最后我们尝试使用后台工作程序,代码如下:
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 中的非法字符
有谁知道编程加载屏幕的正确方法?
如果您需要更多详细信息,我肯定可以回答您的问题。