我知道我可以使用类似下面的回调方法验证xml的模式,但有没有一种方法可以同步执行而不是事件驱动?同步XML模式验证? .NET 3.5
我想到的一种方法是设置一个类成员布尔标志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
}
我认为你犯了一个错字,你的意思是“不同步做”而不是“同步做”,不是吗? – ggPeti
我不明白你的意思。这是_is_同步。当发现错误或警告时,会同步调用“ValidationEventHandler”。你想要什么? –
通过同步,我的意思是我不想继续下去,直到我知道是否发现错误,因为我想根据后续的逻辑判断是否有错误。通过事件处理程序,我不知道事件何时可能会触发,因此我需要等到它启动才能继续。 – M3NTA7