Ждите нажатия кнопки во время чтения или во время цикла - PullRequest
0 голосов
/ 14 декабря 2018

Я создаю программу часов.Сотрудники нашего офиса хотели бы иметь возможность отправлять сообщения конкретным сотрудникам, когда они приходят. Проблема, с которой я сталкиваюсь, заключается в том, что при отображении нескольких сообщений оно переходит к последнему.

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 # , но оно сделало то же самое, проскользнуло мимо кнопки и снова показало последнее сообщение.

1 Ответ

0 голосов
/ 15 декабря 2018

Я бы подошел к этой проблеме следующим образом.Сделайте так, чтобы ваш читатель загружал все сообщения в коллекцию, такую ​​как очередь (это коллекция «первым пришел - первым вышел», идеально подходит для того, что вы пытаетесь сделать). После цикла, если есть какие-либо сообщения, отобразите первоеодин.Подключите событие 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...