2

我编写了一个 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() 行,但结果是一样的。

4

1 回答 1

0

尝试在 .Save() 之前添加 DoEvents

    System.Windows.Forms.Application.DoEvents();
    document.Save()
于 2013-03-12T21:32:54.490 回答