次のようなコールバック メソッドを使用してスキーマに対して xml を検証できることはわかっていますが、イベント ドリブンではなく同期的に検証する方法はありますか?
私が考えた 1 つの方法は、クラス メンバーのブール値フラグ IsValidated=false を設定してから、
xml.Validate(ValidationEventHandler) を呼び出すことです。イベント ハンドラーは、終了後に IsValidated=true を設定します。その間、フラグが true に設定されるまでループ チェックを実行してから続行します。
これは .Net 3.5 用です。
public bool ValidateSchema(string xmlPath, string xsdPath)
{
XmlDocument xml = new XmlDocument();
xml.Load(xmlPath);
xml.Schemas.Add(null, xsdPath);
xml.Validate(ValidationEventHandler);
}
OK、テストを行ったところ、新しいコードが実行される前にコールバックが完了するまで xml.validate が実際に待機しているようです。
次の例では、MessageBox.Show("After Validate"); myValidationEventHandler の実行後に常に発生します。
また、これを確認するためにコードをステップ実行しました。
だから、私の質問は問題ではないと思います。
// load etc.
...
xmlValidate(myValidationEventHandler);
MessageBox.Show("After Validate");
private void myValidationEventHandler(object sender, ValidationEventArgs e)
{
for (double i = 0; i < 100000; i++)
{
textBox1.Text = i.ToString();
Application.DoEvents();
}
// do stuff with e
}