如何在后台运行线程
本文关键字:运行 线程 后台 | 更新日期: 2023-09-27 18:35:42
我在.NET 3.5中有一个(Winform)程序,它将文件发送到ftp服务器。我在后台使用线程,因为我想将文件发送到ftp并同时显示进度条。
但是,当程序执行打开时,我遇到了问题,Stream reqStream = request.GetRequestStream();
程序显示MessageBox.Show("Výsledek odesílání naleznete v souboru vysledek.txt", "Výsledek")
,然后跳回到reqStream.Write(buffer, 0, buffer.Length)
。我不明白为什么。
这是我的代码:
private void Odeslat_Click(object sender, EventArgs e)
{
button1.Enabled = false;
button2.Enabled = false;
Thread thread = new Thread(Process);
thread.IsBackground = true;
thread.Start();
MessageBox.Show("Výsledek odesílání naleznete v souboru vysledek.txt", "Výsledek");
button1.Enabled = true;
button2.Enabled = true;
}
public void Process()
{
foreach (string Prodejna in SeznamProdejen)
{
i = i + 1;
Update1(i);
//some long task
..............
Stream reqStream = request.GetRequestStream(); //PROBLEM
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
.................//some other code
}
}
public void Update1(int i)
{
if (InvokeRequired)
{
this.BeginInvoke(new Action<int>(Update1), new object[] { i });
return;
}
progressBar1.Value = i;
}
它直接到达消息框,因为上传发生在另一个线程中,因此是异步的。
如果您想等待上传线程完成,则必须加入它:
thread.Start();
thread.Join();
MessageBox.Show("Výsledek ...");