2014-12-30 3 views
-4

나는 ftp 서버에 파일을 보내는 .NET Winform (Winform) 프로그램을 가지고있다. 나는 파일을 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 SeznamProdejen의 문자열 Prodejna (파일 SeznamProdejen의 Prodejna 문자열)을 보내고 progressbar.value가 null 인 이유는 모르겠지만 이유는 모르겠다. – user3755701

답변

1

그것은 직접 메시지 상자에 도달 :

내 코드입니다. 당신이 완료 업로드 스레드 대기 할 경우

당신은 가입해야합니다 :

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

: 감사하지만 진행률 막대가 업데이트되지 않고 진행률 막대의 값이 여전히 유지됩니다. 0 – user3755701

관련 문제