Я знаю, что могу проверить xml на схеме с помощью метода обратного вызова, например, следующим образом, но есть ли способ, который я могу сделать это синхронно, а не с помощью события?
Один из способов, по которым я думал, - установить логический флаг класса 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);
}
Хорошо, я сделал тест, и похоже, что xml.validate фактически ожидает завершения обратного вызова до того, как будет выполнен новый код.
В следующем примере MessageBox.Show( "После проверки" ); всегда происходит после выполнения 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
}