[英]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.