簡體   English   中英

穿線困難。 我究竟做錯了什么?

[英]Threading-Having difficulty. What am I doing wrong?

我創建了一個線程(或者正在嘗試),該線程每隔幾分鍾就會自動保存一次。 每當我單擊該按鈕以啟動線程時,該程序都不會按照指示自動保存。 因此,我正在尋求幫助。 這是代碼:

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) )。這是我收到的錯誤。 在此處輸入圖片說明

將線程設置為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();即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM