在阅读或循环时等待按钮单击

时间:2018-12-14 17:59:57

标签: c# loops for-loop while-loop

我正在创建一个时钟程序。我们的办公室工作人员希望能够在特定员工上班时向他们发送消息。我的问题是,如果要显示多个消息,它将循环到最后一条消息。

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#进行

操作,但它执行了相同的操作,并吹过按钮并再次显示了最后一条消息。

1 个答案:

答案 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();
    }
}