【发布时间】:2019-07-26 20:02:35
【问题描述】:
我是 C# 新手,我正在尝试理解任务逻辑。
我等待打开 LED 灯泡的设备的响应。我想等到灯泡标志变为真,然后对其进行序列化。
1)我在这里检查了很多问题,其中大多数使用任务数组,但我只有一个任务。我找到了this 问题并应用了相同的逻辑,但是,我的任务什么也没做。
2) 最重要的是,我在附近放置了断点:
m_Condition.Set(); 和 m_Condition.Set();,似乎编译器甚至没有看到任务,它们没有任何价值。但是,led 为 ON(意味着 light_flag 为真)但是当我在序列化 light_flag 之前和之后打印时看起来是假的。我无法抓住它是真的那一刻。
3) 另外,我尝试创建一个线程而不是 Task,但是当它变为 true 时我无法捕获该值。
我卡住了,你能告诉我路吗?
ManualResetEventSlim m_Condition = new ManualResetEventSlim(false);
public bool Condition {
get {
return m_Condition.IsSet;
}
set {
if (!obj.light_flag) m_Condition.Set();
else m_Condition.Reset();
}
}
private void chk_Test1_CheckedChanged(object sender, EventArgs e) {
if (chk_Test1.Checked == true) SendMsg("light_flag");
Task myTask = Task.Run(() = >{
m_Condition.Wait();
Serialize();
});
}
void Serialize() {
string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
File.WriteAllText(path_combined, json);
}
【问题讨论】: