С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
1

Аналог Thread.Sleep или Task.Delay

17.09.2015, 18:11. Просмотров 1678. Ответов 16
Метки нет (Все метки)

Есть ли какой-нибудь аналог функциям Thread.Sleep или Task.Delay ? Мне необходимо сделать задержку без блокирования главного потока. Thread.Sleep вызывает полную блокировку главного потока на время, а Task.Delay, который мне отлично подходит, доступен только в 4.5 фреймворке, а использовать можно только средства .NET Framework 4.0
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2015, 18:11
Ответы с готовыми решениями:

Аналог Thread.Sleep
когда вызываешь функцию Вызываю слип в потоке Thread.Sleep(300000) ТО...

Task.Delay отказывает в работе
public static async void randr_sleep(TextEdit e, decimal min, decimal max, bool...

Как реализовать выход при условие=1 из Task.Delay(-1)?
Есть асинхронный таск, который подписывается на ивент, затем идёт бесконечное...

Прервать ожидание Thread.Sleep
Можно ли прервать ожидание Thread.Sleep? У меня сейчас в отдельном потоке...

GetPixel в связке Thread.Sleep
Здравствуйте. Считываю цвет необходимого мне пикселя из игры. Код считывания...

16
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
17.09.2015, 19:07 2
Для 4,0 https://www.nuget.org/packages/Microsoft.Bcl.Async/
1
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 19:20  [ТС] 3
Скачал это расширение. Пишу TaskEx.Delay(время в мс). Что-то оно моментально срабатывает. В чём дело?
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
17.09.2015, 19:23 4
TaskEx.Delay(100).Wait();
0
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 19:28  [ТС] 5
Ну это уже ближе к делу, только вот ведь нужно ещё в метод добавить async, а после установки этой библиотеки это ключевое слово так и не появилось... Как быть?
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
17.09.2015, 19:32 6
Все ок, я проверил на 4,0
C#
1
2
3
4
5
private async void Button_Click(object sender, RoutedEventArgs e)
        {
            await TaskEx.Delay(5000);
            MessageBox.Show("Lala");
        }
0
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 19:35  [ТС] 7
Вот я установил библиотеку и добавил async к button1_Click(), но это к. слово не определяется. (вложение)
0
Миниатюры
Аналог Thread.Sleep или Task.Delay  
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
17.09.2015, 19:41 8
Странно, я сделал пустой проект в VS2013 Net 4.0 и все определяется.
0
Вложения
Тип файла: rar WindowsFormsApplication1.rar (1.86 Мб, 5 просмотров)
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 19:46  [ТС] 9
Сейчас проверил: в 2012, 2013 и 2015 студиях всё успешно, а вот 2010 отказывается видеть async. Фишка в том, что мне нужно скомпилировать именно в ней проект, т.к. Win XP не поддерживает проги, написанные в VS 2012 и выше
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
17.09.2015, 20:12 10
The Visual Studio Async CTP (Version 3) extends Visual Studio 2010, providing a new, streamlined syntax for asynchronous development.
http://www.microsoft.com/en-us/download/details.aspx?id=9983

Добавлено через 2 минуты
Цитата Сообщение от VladimirZ29 Посмотреть сообщение
т.к. Win XP не поддерживает проги, написанные в VS 2012 и выше
Мне кажется все дело только во Framework, чтобы был не выше 4,0, вне зависимости от того где написано.
При создании проекта можно указать 4,0 (по умолчанию 4,5)
0
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 21:03  [ТС] 11
4.0 и стоит

Добавлено через 43 минуты
Ну в общем с Async проблему решил, но вот возникла другая: при запуске программы на Win XP (виртуалка) вылетает ошибка "Невозможно загрузить файл или сборку System.Core Version=2.0.5.0 .... Данное имя сборки или база кода недействительны. Исключение 0x80131047". Весь инэт перерыл, не нашел решения. Подскажите пожалуйста
0
Storm23
Эксперт .NETАвтор FAQ
6570 / 3982 / 1448
Регистрация: 11.01.2015
Сообщений: 5,153
Записей в блоге: 32
17.09.2015, 21:09 12
VladimirZ29, столько мучений лишь бы поток не создавать?
0
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 21:19  [ТС] 13
Создам поток - начнутся исключения типа "Использование элемента, созданного не в этом потоке". Да и ещё есть одно НО: нет возможности переписывать проект
0
VladimirZ29
1 / 1 / 2
Регистрация: 09.01.2015
Сообщений: 38
17.09.2015, 21:26  [ТС] 14
Вот снимок экрана
0
Миниатюры
Аналог Thread.Sleep или Task.Delay  
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
17.09.2015, 21:42 15
Цитата Сообщение от VladimirZ29 Посмотреть сообщение
начнутся исключения типа "Использование элемента, созданного не в этом потоке"
А применить маршалинг в поток UI религия не позволяет? Там всего несколько слов добавить.
0
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.09.2015, 23:43 16
Цитата Сообщение от VladimirZ29 Посмотреть сообщение
Ну в общем с Async проблему решил, но вот возникла другая: при запуске программы на Win XP (виртуалка) вылетает ошибка "Невозможно загрузить файл или сборку System.Core Version=2.0.5.0 .... Данное имя сборки или база кода недействительны. Исключение 0x80131047". Весь инэт перерыл, не нашел решения. Подскажите пожалуйста
доки надо читать
0
Casper-SC
Эксперт .NET
3638 / 1843 / 360
Регистрация: 27.03.2010
Сообщений: 5,169
Записей в блоге: 1
18.09.2015, 21:49 17
VladimirZ29, так а что ты паришься? Ну сделай примерно так. Есть ещё много вариантов. Вот один из них:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Threading;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private readonly SynchronizationContext _syncContext;
 
        public Form1()
        {
            InitializeComponent();
            _syncContext = SynchronizationContext.Current;
        }
 
        private void Button1_Click(object sender, EventArgs e)
        {
            Thread.Sleep(1000); //Твоя долгая операция.
        }
 
        //Ты решил сделать задержку так, чтобы форма не висела.
        private void Button2_Click(object sender, EventArgs e)
        {
            ThreadPool.QueueUserWorkItem(unused =>
            {
                Thread.Sleep(1000); //Твоя долгая операция.
                _syncContext.Post(state =>
                {
                    DoWork();
                }, null);
            });
        }
        
        private void DoWork()
        {
            Text = "DoWork";
        }
    }
}
0
18.09.2015, 21:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2015, 21:49

Как запустить Task в Thread
Есть метод который должен работать в потоке и вне потока. var regionId =...

Поговорим про Task и Thread
1) Объекты синхронизации, которые были в Thread актуальны для Task? 2)...

ThreadPool или Thread
Делаю сервер, к которому может подключаться много клиентов, каждого клиента...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru