如何在后台运行一个线程?

时间:2014-12-30 08:16:37

标签: c# multithreading

我在.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;
}

1 个答案:

答案 0 :(得分:1)

它直接到达消息框,因为上传发生在另一个线程中,因此是异步的。

如果您想等待上传线程完成,您必须加入它:

thread.Start();  
thread.Join();
MessageBox.Show("Výsledek ...");
相关问题