Sé que puedo validar xml contra un esquema utilizando un método de devolución de llamada como el siguiente, pero ¿hay alguna forma de que pueda hacerlo de forma síncrona en lugar de por evento?¿Validación del esquema XML síncrono? .NET 3.5
Una forma en que pensé sería establecer un indicador booleano miembro de clase IsValidated = falso luego
llamada xml.Validate (ValidationEventHandler). El controlador de eventos establecería IsValidated = true una vez que haya finalizado. Mientras tanto, haz una comprobación de bucle hasta que la bandera se establezca en verdadero y luego continúa.
Esto es para .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, he hecho una prueba y parece que en realidad xml.validate espera hasta que la devolución de llamada se ha completado antes de ejecutar el nuevo código.
En el siguiente ejemplo, MessageBox.Show ("Después de validar"); siempre ocurre después de la ejecución de myValidationEventHandler.
También revisé el código para verificar esto.
Supongo que eso hace que mi pregunta no sea un problema.
// 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
}
Creo que ha cometido un error tipográfico, quiere decir "hacerlo de forma asíncrona" en lugar de "hacerlo sincrónicamente", ¿no? – ggPeti
No entiendo lo que quieres decir. Esto _es_ sincrónico. Y el 'ValidationEventHandler' se llama sincrónicamente cuando se encuentra un error o advertencia. ¿Qué quieres en cambio? –
Por sincrónico, quiero decir que no quiero continuar hasta saber si se ha encontrado un error o no, porque quiero basar la lógica posterior en si hubo errores o no. Con el controlador de eventos, no sé cuándo se puede iniciar el evento, por lo tanto, debo esperar hasta que se dispare antes de continuar. – M3NTA7