如何在后台运行线程

本文关键字:运行 线程 后台 | 更新日期: 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 ...");