Открытие нескольких окон по таймеру

79
06 декабря 2021, 23:40

По таймеру делаю проверку на появление новых записей в бд и с появлением новой записи необходимо открыть окно с деталями этой записи. если делаю по таймеру, то Окна открываются но неотрисованные до конца болтаются на экране и доступа к ним нет. окно как бы на .Show() висит... Если делаю не по таймеру а кликом на кнопке, то все открылись отрисовались и всё ок.

async void showwins()
        {
            while (1==1)
            {
                for (int i = 0; i <= 5; i++)
                {
                    SmallWin f = new SmallWin($"{i}:{DateTime.Now.ToLongTimeString()}");
                    var d = await Task.Run(()=>showsinglewin(i,f));
                }
            }
        }
        int showsinglewin(int i, SmallWin w)
        {            
            w.Show();
            return 1;
        }
Answer 1

Вы можете использовать обычный таймер, но тогда вам надо будет позаботиться о запуске окна в нужном потоке. Или вы можете использовать DispatcherTimer, но тогда весь метод будет запущен в UI потоке (то есть нельзя в таком методе использовать бесконечные циклы, повесите всё приложение).

Пример:

public class MainForm:Form
{
    System.Threading.Timer _timer;
    DispatcherTimer _dTimer;
    public MainForm()
    {
        _timer = new System.Threading.Timer(TimerCallback, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(10));
        _dTimer = new DispatcherTimer();
        _dTimer.Interval = TimeSpan.FromSeconds(13);
        _dTimer.Tick+= DispatcherTimerCallback;
        _dTimer.Start();
        this.FormClosing+= FormClosingCallback;

    }
    private void FormClosingCallback(object sender, EventArgs e)
    {
        _dTimer.Stop();
        _timer.Dispose();
    }
    private void TimerCallback(object state)
    {
        this.Invoke(new Action(() =>
        {
            var form = new Form() {Text = "TimerCallback form"};
            form.Show();
        }));
    }
    private void DispatcherTimerCallback(object sender, EventArgs e)
    {
        var form = new Form() { Text = "DispatcherTimerCallback form" };
        form.Show();
    }
}

Как использовать

new MainForm().ShowDialog();
READ ALSO
Ключевое слово async

Ключевое слово async

При ознакомлении с данным вопросом встретил такое определение: Ключевое слово async

103
Работа с методом

Работа с методом

Как правильно такое реализовывается или я что то не то себе надумал))) ?

79
Чтение большого текстового файла

Чтение большого текстового файла

Имею большой текстовый файл(~50000 строк)Через streamreader читаю его, в файле имеются пустые строки

157
Не сохраняются данные в $_SESSION

Не сохраняются данные в $_SESSION

При обновлении страницы (по нажатию определенной кнопки) сиссия каждый раз обновляется, то есть старое значение, сохраненное в ней, я не могу...

261