c# - 在 C# 中连续读取 XML
问题描述
我有如下 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>
问题:如何使用 C# 每秒读取 xml 数据?
我尝试了以下方法:
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();
}
解决方案
您可以使用 Task.Delay 重复阅读 xml 文件。1、创建任务方法重复读取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);
}
推荐阅读
- java - 运行 Java 的 Azure 网站的 App_offline.htm 不起作用
- scala - 在 Scala 中使用一对一映射连接两个字符串
- javascript - 复制particles.js 配置,但完成不同的结果?
- android - 在 android 中对音频(例如机器人声音、大型机器人声音)应用效果
- javascript - 派生数据是否应该由 NGRX 存储负责?
- c# - 面板控制和检查面板属性为空
- python-3.x - 如何使用 Mac 在 Pycharm 中将 .ARFF 文件转换为 CSV?
- swift - 如何在用户输入“readLine()”中使用二元运算符“%”?
- ios - 在存储的 Fetch Request 中使用自定义谓词时,变量替换的正确语法是什么?
- git - 使用 git subtree 推送到项目根目录