我已经创建了一个线程(或者我正在尝试),它会每隔几分钟自动保存一次。每当我单击按钮启动线程时,程序都不会按照指示进行自动保存。所以我伸手去寻求帮助。这是代码:
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)
)收到错误。这是我收到的错误。
答案 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();