我知道我可以使用如下回调方法针对模式验证 xml,但是有没有一种方法可以同步而不是事件驱动?
我想到的一种方法是设置一个类成员布尔标志 IsValidated=false,然后
调用 xml.Validate(ValidationEventHandler)。一旦完成,事件处理程序将设置 IsValidated=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
}