Читайте XML постоянно в C#
У меня есть XML-файл следующим образом:
<?xml version="1.0" encoding="ISO-8859-1"?>
<sami>
<title>IN[1]=false</title>
<title>IN[2]=true</title>
<title>OUT[1]=true</title>
<title>OUT[2]=flase</title>
<title>OUT[3]=flase</title>
<title>OUT[4]=flase</title>
<title>$IN[5]=false</title>
</sami>
Вопрос: как читать данные xml каждую секунду, используя C#?
Я попробовал следующее:
private void Form1_Load(object sender, EventArgs e)
{
DateTime nextRead;
Thread thread = new Thread(() =>
{
nextRead = DateTime.Now.AddSeconds(1000);
XDocument doc = XDocument.Load("C:\\Users\\lenovo\\Desktop\\Sxml.xml");
var result = doc.Descendants("title").ToList();
textBox1.Text = result[0].Value;
// listBox1.Items.Add(result[0].Value);
// listBox1.Items.Add(result[1].Value);
// listBox1.Items.Add(result[2].Value);
Thread.Sleep(Math.Max(0, (DateTime.Now - nextRead).Milliseconds));
});
thread.Start();
}
2 ответа
Вы можете использовать Task.Delay, чтобы повторить чтение XML-файла. Во-первых, создайте метод задачи, чтобы повторить чтение XML-файла:
static async Task RepeadtReadingXml(int delayMillis, int repeatMillis, CancellationToken ct)
{
Console.WriteLine("{0}: Start reading xml file", DateTime.Now);
await Task.Delay(delayMillis, ct);
while (true)
{
Console.WriteLine("{0}: Reading xml file every 1 sec", DateTime.Now);
//***************************************************//
// Add you logic to read your xml file here //
//***************************************************//
await Task.Delay(repeatMillis, ct);
}
}
И позвоните туда, где вам нужно повторить чтение:
var cts = new CancellationTokenSource(); // Work for 5 sec
try
{
RepeadtReadingXml(2000, 1000, cts.Token).Wait();
}
catch (AggregateException ae)
{
ae.Handle(e => e is TaskCanceledException);
}
Для этого вам необходимо добавить в форму Timer
из панели инструментов.
Задавать timer1
интервал до 1000 миллисекунд. Создать событие Hadnler для timer1.Tick
событие:
public partial class Form1 : Form
{
XDocument doc;
public Form1()
{
InitializeComponent();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
doc = XDocument.Load("C:\\Users\\Mi\\Desktop\\Sxml.xml");
var result = doc.Descendants("title").ToList();
textBox1.Text = result[0].Value;
listBox1.Items.Add(result[0].Value);
listBox1.Items.Add(result[1].Value);
listBox1.Items.Add(result[2].Value);
}
}