我有一个将文件上传到服务器的应用程序,但是当我按下上传时它会冻结直到完成,所以我想要弹出另一个表单,说上传并在该表单上嵌套所有上传内容冷冻那个主要形式。但要做到这一点,我需要能够将选定的信息发送到其他表格。
我尝试过使用BackgroundWorker,但是不起作用,表单仍然冻结。
答案 0 :(得分:3)
之所以冻结是因为你在与GUI或主线程相同的线程上进行上传。 您可以创建一个工作线程来处理上传的工作,这样GUI在处理上传时就不会锁定。
示例:
private void uploadButton_Click(object sender, EventArgs e)
{
object[] params = new object[] { "your file what ever type this is a generic example"};
Thread uploadThread = new Thread(new ParameterizedThreadStart(processUpload));
uploadThread.IsBackground = true;
uploadThread.Start(params);
}
private void processUpload(object params){
// do upload logic here
object[] _params = (object[])params;
string s = _params[0].ToString();
}
将信息从一种形式传递到另一种形式是直截了当的,但是这种形式也会在处理时导致锁定。如果这就是你想要做的,那么只需创建一个构造函数来为你想传递的任何东西取一个参数。然后相应地调用它。
private string something = null;
public MySecondForm(string Something){
this.something = Something;
MessageBox.Show(this.something);
}
// Call this in the parent form
MySecondForm mySecondForm = new MySecondForm("hello world");
mySecondForm.Show();
答案 1 :(得分:1)
如果您使用的是WebClient课程,则可以使用UploadFileAsync方法。您还可以将一些信息从一个表单传递到另一个表单,如下所示。
<强>窗体2 强>
向Form2添加一个简单的构造函数。
public Form2(string path) { // ... }
<强> Form1中强>
Form2 frm2 = new Form2("Path");
答案 2 :(得分:0)