2012-03-18 81 views
1

我爲我的短信應用程序使用了背景。如何在winforms c中使用長時間運行的進程#

我創建了一個需要連續發送消息的應用程序。

當我使用background.My應用程序被絞死我不知道爲什麼要這樣,

我的代碼是

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    //mycode 
} 

private void backgroundWorker1_RunWorkerCompleted(
    object sender, RunWorkerCompletedEventArgs e) 
{ 
    backgroundWorker1.CancelAsync(); 
    backgroundWorker1.RunworkAsync(); 
} 

後,我已經嘗試了本

public void Thread() 
{ 
    Thread D = new Thread(BackgroundCode); 
    D.Start(); 
} 

public void BackgroundCode() 
{ 
    for (int i5 = 1; i5 > 0; i5 += 1) 
    { 
     //mycode 
    } 

} 

這兩部作品罰款2或3分鐘,但在此之後它會掛起。

請任何人都可以請幫助我。

在此先感謝。

+0

你是否正在訪問線程中的UI控件! – Anirudha 2012-03-18 15:28:58

+0

它會暫停並稍後繼續嗎?您等待掛機釋放多久了?如果你的代碼非常快,你的循環中可能會很快耗盡你的代碼。 – automatic 2012-03-18 15:29:58

+0

你的背景代碼是一個無限循環? – Robar 2012-03-18 15:31:35

回答

1

試試這個

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    while(true) 
    { 
     //your sms code 
     //call CancelAsync() here if you want to get out!!!! 
    } 
} 

private void backgroundWorker1_RunWorkerCompleted(
    object sender, RunWorkerCompletedEventArgs e) 
{ 
    //donot include RunWorkerAsync() and CancelAsync() in this method! 
} 
+0

Anirudha請稍候,我檢查。 – Arshiya 2012-03-18 15:36:22

+0

它掛起後我得到一個錯誤是一個問題導致程序停止正常工作。 Windows將關閉該程序並通知您是否有解決方案。 – Arshiya 2012-03-18 15:44:18

+0

他們沒有錯誤得到應用程序掛起之前得到 – Arshiya 2012-03-18 15:46:20

0

This is a bit of a long post,但它似乎適合你的問題非常好。

基本上,這表明你如何與一個BackgroundWorker或任務做並行庫(TPL將是我的建議)對於TPL您創建將在類用來傳遞消息的ProgressReporter類

回到主線程,同時繼續運行任務。

另外,你的for循環將永遠不會結束,因爲它表示在i5大於0時運行。並且它從1開始並向上計數,所以它永遠不會小於或等於零。這樣可以解決你的問題,但是一旦你解決了這個問題,博客課的進度記者應該幫助其他人。

相關問題