У меня есть (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;
}
Что на ваш вопрос именно? Вы начали фоновый поток в 'thread.Start();', поэтому с этого момента ваш код в 'Odeslat_Click' выполняется параллельно с' Process() '- это нормальное поведение. Почему вы думаете, что здесь что-то не так? –
Какое поведение вы ожидаете? – Sievajet
@Sievajet Я хочу, чтобы foreach (строка Prodejna в SeznamProdejen) отправил файл и обновил progressbar, но progressbar.value имеет значение null ... я не знаю почему .. – user3755701