2013-03-11 88 views
1

我編寫了一個處理許多Visio文檔的Visio 2010加載項(在C#中)。在一個Ribbon1.button1_Click方法中,我調用一個新的線程(processVisioFiles),它處理一個大循環中的所有vsd文件(超過40分鐘)。當我關閉它時,Visio提示我保存文檔,儘管我只保存了它

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會提示用戶手動保存或放棄更改。 如何以編程方式保存並關閉而不提示用戶手動執行此操作?

p.s.除此之外(當我處於調試模式時),我在document.Save()之後等待了一段時間,然後進入document.Close()行,但結果是一樣的。

+0

大概一個錯字,但'documend.Saved'? – 2013-03-12 21:37:48

+0

這是一個錯字,謝謝 – user615993 2013-03-13 22:20:07

回答

0

嘗試.Save之前添加的DoEvents()

System.Windows.Forms.Application.DoEvents(); 
    document.Save() 
+0

謝謝,但不幸的是,這是行不通的。我試圖設置屬性保存爲true: 'Globals.ThisAddIn.Application.ActiveDocument.Saved = true;' 'document.Close();' 這工作,但我仍然無法理解爲什麼: 'document.Save();' 'document.Close();' 不起作用 – user615993 2013-03-13 22:28:48

相關問題