Save メソッドは別のスレッドで実行されないため、Save が完了すると返されます。
DocumentBeforeSaveイベントはブール値の Cancel 呼び出しを受け取り、これはref パラメーターと共に渡されます。これを true に設定すると、実行しようとしている保存がキャンセルされます。
これを true に設定してから、自分でSaveを呼び出すことができます。こうすると、同じスレッドで実行されるため、保存がいつ完了したかがわかります。次のようになります。
using MSWord = Microsoft.Office.Interop.Word;
namespace ConsoleApplication41
{
class Program
{
static void Main()
{
var app = new MSWord.Application();
var doc = app.Documents.Open(@"..\..\myDoc.docx");
app.DocumentBeforeSave += app_DocumentBeforeSave;
}
static void app_DocumentBeforeSave(MSWord.Document Doc, ref bool SaveAsUI, ref bool Cancel)
{
Cancel = true;
Doc.Save();
//Now you know the document has saved
}
}
}