我编写了一个 Visio 2010 加载项(在 C# 中),它处理许多 Visio 文档。在 Ribbon1.button1_Click 方法中,我调用了一个新线程(processVisioFiles),该线程在一个大循环中处理所有 vsd 文件(需要 40 多分钟)。
public partial class Ribbon1
{
private ThisAddIn exportAddIn;
...
...
public Thread StartTheThread(DirectoryInfo startFolder, bool someVal)
{
var t = new Thread(() => exportAddIn.processVisioFiles(startFolder, false));
t.SetApartmentState(ApartmentState.STA);
t.Name = "processVisioFiles";
t.IsBackground = true;
t.Start();
return t;
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
//exportAddIn.processVisioFiles(startFolder, false);
StartTheThread(startFolder, false);
}
}
每次在我以编程方式关闭 Visio vsd 文档之前,我都会这样做document.Save()
,然后document.Close()
. 然而,它们是许多文档(并非全部但总是相同),这促使我手动保存它们。
我需要说,当我使用 UI 在一个线程中启动大循环时,手动保存文档没有问题
private void button1_Click(object sender, RibbonControlEventArgs e)
{
exportAddIn.processVisioFiles(startFolder, false);
StartTheThread(startFolder, false);
}
但随后 Visio UI 冻结(“应用程序未响应”消息),一段时间后,Visio 中止循环遍历所有文件。
我测试了保存document.SaveAs(...)
和 document.SaveAsEx(...) 和
if(document.Saved == false)
{
document.Save();
}
document.Close();
但结果是一样的。每次相同的 Visio 文件未保存并保持未保存时,UI 都会提示用户手动保存或放弃更改。如何以编程方式保存和关闭而不提示用户手动执行此操作?
ps 此外(当我处于调试模式时)我在 document.Save() 之后等待了一段时间,然后进入 document.Close() 行,但结果是一样的。