我正在创建一个时钟程序。我们的办公室工作人员希望能够在特定员工上班时向他们发送消息。我的问题是,如果要显示多个消息,它将循环到最后一条消息。
while(reader.Read()
{
richtextbox.Text = reader["Message"].ToString();
//need to pause here and wait for them to press the acknowledge button
{
是否有等待或暂停直到按确认按钮的方法。
感谢您的帮助。
ps。我尝试使用
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;
}
}
从该线程Wait until a click event has been fired C#进行操作,但它执行了相同的操作,并吹过按钮并再次显示了最后一条消息。
答案 0 :(得分:0)
我会这样处理。让您的读者将所有消息加载到一个队列之类的集合中(这是一个先进先出集合,非常适合您尝试做的事情。)循环后,如果有任何消息,则显示第一个一。将click事件连接到类似的代码块,该代码块每次单击按钮时将显示下一条消息(如果有的话)。代码如下:
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();
}
}