线程 - 有困难。我究竟做错了什么?

时间:2015-09-27 10:05:34

标签: c# multithreading

我已经创建了一个线程(或者我正在尝试),它会每隔几分钟自动保存一次。每当我单击按钮启动线程时,程序都不会按照指示进行自动保存。所以我伸手去寻求帮助。这是代码:

private Thread saver;
...
saver.SetApartmentState(System.Threading.ApartmentState.STA);
saver = new Thread(new ThreadStart(SaveRegularly));
saver.Start();

这是我的SaveRegularly方法:

private bool stopAndDie = false;
private void SaveRegularly()
 {
   //DateTime saveDueAt = DateTime.Now.AddMinutes(0.25);
   //do
     //{
        //Thread.Sleep(1000);
        //if (DateTime.Now >= saveDueAt)
     //{
        if (SaveDoc.FileName != "")  //ADDED THIS TODAY (24/09)
          {
            CreateWordDocument(FilePath, SaveDoc.FileName, pathImage);
            MessageBox.Show("Updated");
            return;
          }
        else
          {
             if (SaveDoc.ShowDialog() == DialogResult.OK)
              {
                CreateWordDocument(FilePath, SaveDoc.FileName, pathImage);
                MessageBox.Show("New Save");
                return;
              }
           }
            timer1.Start();
     }

这是针对FormClosing事件的,因此线程会停止。

        stopAndDie = true;
        saver.Join(2000);
        timer1.Stop();

当我运行程序并单击保存按钮时,我在SaveFileDialog行(if (SaveDoc.ShowDialog() == DialogResult.OK))收到错误。这是我收到的错误。 enter image description here

1 个答案:

答案 0 :(得分:1)

将线程设置为STA模式。

saver.SetApartmentState(System.Threading.ApartmentState.STA);

但是如果你想定期安排一些事情,为什么不使用计时器呢? 像这样:

System.Timers.Timer timer = new System.Timers.Timer(5 * 60 * 1000);
timer.Elapsed += (s, e) =>
    {
       //Invoke your show dialog on the UI thread here
    };
timer.Start();

当你希望它停止时,只需调用timer.Stop();