Tôi biết tôi có thể xác thực xml dựa vào lược đồ bằng cách sử dụng phương thức gọi lại như sau, nhưng có cách nào để tôi có thể thực hiện đồng bộ thay vì hướng sự kiện không?Xác thực lược đồ XML đồng bộ? NET 3.5
Một cách tôi nghĩ là đặt cờ boolean thành viên của lớp IsValidated = false rồi
gọi xml.Validate (ValidationEventHandler). Trình xử lý sự kiện sẽ thiết lập IsValidated = true khi nó kết thúc. Trong thời gian đó, hãy kiểm tra vòng lặp cho đến khi cờ được đặt thành true sau đó tiếp tục.
Điều này dành cho .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, tôi đã thực hiện kiểm tra và có vẻ như xml.validate thực sự đợi cho đến khi cuộc gọi hoàn tất trước khi mã mới được thực thi.
Trong ví dụ sau, MessageBox.Show ("Sau khi xác thực"); luôn xảy ra sau khi thực hiện myValidationEventHandler.
Tôi cũng đã thực hiện qua mã để xác minh điều này.
Vì vậy, tôi đoán điều đó làm cho câu hỏi của tôi không thành vấn đề.
// 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
}
Tôi nghĩ bạn đã mắc lỗi đánh máy, nghĩa là "làm điều đó một cách không đồng bộ" thay vì "thực hiện đồng bộ", phải không? – ggPeti
Tôi không hiểu ý bạn là gì. Điều này _is_ đồng bộ. Và 'ValidationEventHandler' được gọi đồng bộ khi tìm thấy lỗi hoặc cảnh báo. Bạn muốn gì? –
Bằng cách đồng bộ, tôi có nghĩa là tôi không muốn tiếp tục cho đến khi tôi biết nếu một lỗi được tìm thấy hay không bởi vì tôi muốn căn cứ vào logic tiếp theo về việc liệu có lỗi hay không. Với người xử lý sự kiện, tôi không biết khi nào sự kiện có thể cháy, do đó tôi cần đợi cho đến khi nó xảy ra trước khi tiếp tục. – M3NTA7