2014-12-30 3 views
-4

У меня есть (Winform) программа в .NET 3.5, которая отправляет файлы на 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

Что на ваш вопрос именно? Вы начали фоновый поток в 'thread.Start();', поэтому с этого момента ваш код в 'Odeslat_Click' выполняется параллельно с' Process() '- это нормальное поведение. Почему вы думаете, что здесь что-то не так? –

+0

Какое поведение вы ожидаете? – Sievajet

+0

@Sievajet Я хочу, чтобы foreach (строка Prodejna в SeznamProdejen) отправил файл и обновил progressbar, но progressbar.value имеет значение null ... я не знаю почему .. – user3755701

ответ

1

Он непосредственно достигает окно сообщения, поскольку загрузка происходит в другом потоке и, следовательно, асинхронна.

Если вы хотите ждать поток загрузки, чтобы завершить, вы должны присоединиться к нему:

thread.Start(); 
thread.Join(); 
MessageBox.Show("Výsledek ..."); 
+0

: Спасибо, но теперь мой прогрессбар не обновляется, значение progressbar по-прежнему 0 – user3755701

Смежные вопросы