2

多くの Visio ドキュメントを処理する Visio 2010 アドイン (C#) を作成しました。Ribbon1.button1_Click メソッド内で、すべての vsd ファイルを大きなループ (40 分以上かかる) で処理する新しいスレッド (processVisioFiles) を呼び出します。

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);         
    }
}

document.Save()Visio vsd ドキュメントをプログラムで閉じる前に、毎回document.Close(). それにもかかわらず、それらは多くのドキュメント (すべてではなく常に同じ) であるため、手動で保存する必要があります。

UIを使用して1つのスレッド内で大きなループを開始するときに、ドキュメントを手動で保存することに問題はないと言う必要があります

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 に答える