c# - 在阅读或循环期间等待按钮单击
问题描述
我正在创建一个时钟程序。我们的办公室工作人员希望能够在特定员工打卡时向他们发送消息。我遇到的问题是,如果要显示多条消息,它会循环到最后一条。
while(reader.Read()
{
richtextbox.Text = reader["Message"].ToString();
//need to pause here and wait for them to press the acknowledge button
{
有没有办法等待或暂停,直到按下确认按钮。
任何帮助表示赞赏。
附言。我试过使用
public static class Utils
{
public static Task WhenClicked(this Control target)
{
var tcs = new TaskCompletionSource<object>();
EventHandler onClick = null;
onClick = (sender, e) =>
{
target.Click -= onClick;
tcs.TrySetResult(null);
};
target.Click += onClick;
return tcs.Task;
}
}
从这个线程等到点击事件被触发 C#但它做了同样的事情并吹过按钮并再次显示最后一条消息。
解决方案
我会这样处理这个问题。让您的阅读器将所有消息加载到像队列这样的集合中(这是一个先进先出的集合,非常适合您尝试做的事情。)在循环之后,如果有任何消息,则显示第一个一。将单击事件连接到类似的代码块,每次单击按钮时都会显示下一条消息(如果存在的话)。代码如下所示:
Queue<string> EmployeeMessages = new Queue<string>();
private void OnLogin()
{
var reader = GetReader();
while (reader.Read())
{
EmployeeMessages.Enqueue(reader["Message"].ToString());
}
if (EmployeeMessages.Count > 0)
{
label1.Text = EmployeeMessages.Dequeue();
}
}
private void button1_Click(object sender, EventArgs e)
{
if (EmployeeMessages.Count > 0)
{
label1.Text = EmployeeMessages.Dequeue();
}
}
推荐阅读
- python - ImportError:无法从 'pip._vendor.retrying' 导入名称 'retry' (c:\python39\lib\site-packages\pip\_vendor\retrying.py)
- html - Bootstrap-Vue b-dropdown 按钮打开时的颜色
- shopify - 为 Shopify 公共应用生成在线和离线访问令牌
- python - 减少执行时间
- c++ - 根据 c++ 模板函数的参数类型解析为不同的类型
- sql - 在 POSTGRESQL 中每 n 行查询一次
- java - 调整换币方式
- javascript - 在动态添加的选择框上禁用相同的选择选项
- c++ - C++ 错误:标记“&&”在此版本中不是有效的语句分隔符
- nginx - RTMP Nginx exec_push 与 alaw 和 h264