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...


}

不确定问题可能是什么。

4

2 回答 2

3

我可以在这里想到两件事。

  1. Start 方法没有被调用(但你说你可以调试它,所以这不是一个真正的问题?)
  2. 如果前台线程在它开始之前就结束了,那么后台工作线程就是一个后台工作线程;它会结束,即使是突然的。

编辑1:

你可以试试下面的吗?

private void Start()
{
   backgroundWorker1.RunWorkerAsync();  //This works perfectly
   Thread.Sleep(10000);
   ...
   ...
   // rest of your code.
于 2013-10-31T18:15:08.153 回答
0

尝试添加这一行:

bool running = backgroundWorker1.IsBusy();

RunWorkerAsync()被叫到。并使用调试器或打印消息检查其值。这将指示线程的状态 - 我怀疑它立即完成了工作(?)

于 2013-10-31T18:36:10.550 回答