2013-10-31 47 views
0
public Main() 
{ 
    backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork); 
} 

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



private void Start() 
{ 
     backgroundWorker1.RunWorkerAsync(); //This works perfectly 





    //////////This isthe offending code//////////// 
     try 
     { 


      string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\" + "FileName.ini"; 

      using (var stream = File.Create(path)) { } 
      File.WriteAllText(path, "Text to write"); 
      file = txtFilePath.Text; 
     } 

     catch (Exception ex) 
     { 

      MessageBox.Show(
       "Error saving configuration file."); 
     } 


     ////////////////////////////////////////// 


     backgroundWorker1.RunWorkerAsync(); //If moved here it does not fire! 

     //Program contines here... 


} 

不知道問題可能出在哪裏。Backgroundworker not firing

+0

這是相當難以相信。代碼是否可達? – Jonesopolis

+0

是可以到達的。它通過它 – kr13

+4

我認爲「一些代碼行」是這個謎的重要組成部分。 –

回答

3

我可以在這裏想到2件事情。

  1. 啓動方法不被調用(但你說,你可以對它進行調試,所以那不是一個真正的問題?)
  2. 背景工人,以及,一個BackgroundWorker線程,如果前景線程甚至之前結束開始;它會結束,即使突然。

編輯1:

你可以試試下面的?

private void Start() 
{ 
    backgroundWorker1.RunWorkerAsync(); //This works perfectly 
    Thread.Sleep(10000); 
    ... 
    ... 
    // rest of your code. 
+0

Start()正在被調用。當調試時,我按下F11 RunWorkerAsync()代碼,它只是去下一行.. – kr13

+1

這是預期;線程不會立即產生(至少在調試時)。如果你多走幾步,應該輸入DoWork方法,除非前景線程已經結束。 – Abhinav

+0

是的,這是有效的! – kr13

0

嘗試加入這一行:

RunWorkerAsync()
bool running = backgroundWorker1.IsBusy(); 

權被調用。並用調試器或打印消息檢查其值。 這將表明線程的狀態 - 我懷疑它立即完成其作品(?)

+0

它返回true – kr13

+0

所以我猜這個線程正在運行。將一些行添加到您的DoWork()方法中,並附加一個斷點,以查看您的代碼是否在那裏。 – etaiso

+0

我在DoWork()開始時有一個消息框,但它不運行 – kr13