Вопрос по thread-sleep, c# – Thread.Sleep () без зависания интерфейса

2

Во-первых, я новичок вC# и я хотел бы сделать это:

class2.method_79(null, RoomItem_0, num, num2, 0, false, true, true);
System.Threading.Thread.Sleep(250);
class2.method_79(null, RoomItem_0, num, num4, 0, false, true, true);
System.Threading.Thread.Sleep(300);
class2.method_79(null, RoomItem_0, num, num6, 0, false, true, true);

Но это решение замораживает пользовательский интерфейс, как я могу заставить второе событие произойти через 250 мс после первого и т. Д., Не замораживая пользовательский интерфейс?

Вы также можете сделать методasync и использоватьawait Task.Delay(250). Nico Schertler
УважатьМногопоточность. Sam
Наконец, я использовал асинхронный метод с await task.delay, он работает отлично, спасибо !!! user3640047
возможный дубликатThreading в c # Sam
Не блокируйте поток пользовательского интерфейса. Используйте рабочий поток со сном. (Обратите внимание, что вы также можете лучше использовать что-то вроде таймера). Пожалуйста прочтите этоstackoverflow.com/a/11576659/296526 включая ссылку в ответе. Aphelion

Ваш Ответ

5   ответов
0

ких задач иThread.Sleep() в потоке пользовательского интерфейса.

2

Диспетчерский таймер время вашего выполнения методов ..

13

овательского интерфейса - это сделать ваш метод асинхронным. Чтобы сделать ваш метод асинхронным, добавьтеасинхронной модификатор.

private void someMethod()

в

private async void someMethod()

Теперь вы можете использоватьЖдите оператор для выполнения асинхронных задач, в вашем случае.

await Task.Delay(milliseconds);

Это делает этоасинхронный метод и будет работать асинхронно из вашего потока пользовательского интерфейса.

Обратите внимание, что это поддерживается только в Microsoft .NET Framework 4.5 и выше.

.

2

.Sleep();.

Вот почему он замораживает пользовательский интерфейс. Если вам нужно сделать это без замораживания пользовательского интерфейса, вам нужно будет запустить код в отдельных потоках.

Как я могу сделать, чтобы применить его в моем коде? Я новичок и никогда не видел, как использовать многопоточность ... user3640047
@ user3640047 Тебе придется учиться.Вот хорошая отправная точка. DGibbs
0

Попробуйте этот код

public static void wait(int milliseconds)
        {
            System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
            if (milliseconds == 0 || milliseconds < 0) return;
            timer1.Interval = milliseconds;
            timer1.Enabled = true;
            timer1.Start();
            timer1.Tick += (s, e) =>
            {
                timer1.Enabled = false;
                timer1.Stop();
            };
            while (timer1.Enabled)
            {
                Application.DoEvents();
            }
        }

Похожие вопросы