我知道我可以使用如下回调方法根据模式验证 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("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
}
您可以为 ValidationEventHandler 指定 null 以使 Validate 方法抛出异常。
public bool ValidateSchema(string xmlPath, string xsdPath)
{
XmlDocument xml = new XmlDocument();
xml.Load(xmlPath);
xml.Schemas.Add(null, xsdPath);
try
{
xml.Validate(null);
}
catch (XmlSchemaValidationException)
{
return false;
}
return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)