Я знаю, что могу проверить 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
}