Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2015, 09:07   #1
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию Периодичность запуска кода...

Код:
new Action(() =>{while (true){
    txtBoxAns.Text = "....";

    System.Threading.Thread.Sleep(5000);
}}).BeginInvoke(null, null);
Все бы ничего , но. Программа падает при чтении txtBoxAns.Text, то есть функция периодично запускается и программа при этом не зависает. Но не удается добавить нужные текст в текстовое поле.

Какой выход из этого?
Predator199 вне форума Ответить с цитированием
Старый 18.02.2015, 09:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А синхронизацию не делаешь?
https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
И где в коде чтение? Я вижу только запись.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2015, 09:55   #3
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А синхронизацию не делаешь?
https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
И где в коде чтение? Я вижу только запись.
Имелось ввиду программа читает код, построчно.Дойдя до записи она толи виснет, вообщем не удаться записать текст.

Как из потока Action, заставить ее записать?

Читаю, что т не пойму как поможет (lock и SyncLocк). Можно пример, второй день с этим мучаюсь, перепробовал кучу вариантов.
Predator199 вне форума Ответить с цитированием
Старый 18.02.2015, 10:35   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не вижу тут никаких потоков, только странный кусок кода.

А вообще многопоточность это сложная тема, нельзя просто взять и написать многопоточную программу.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 18.02.2015 в 10:37.
Alex11223 вне форума Ответить с цитированием
Старый 18.02.2015, 10:40   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Примера у меня нет. Я не пишу в шарпее. И я не знаю что это за класс Action у тебя используется.
Цитата:
Не вижу тут никаких потоков
Увидев System.Threading.Thread.Sleep(5000) ; я решил что этот код используется в потоке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2015, 10:44   #6
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не вижу тут никаких потоков, только странный кусок кода.

А вообще многопоточность это сложная тема, нельзя просто взять и написать многопоточную программу.
Подскажите свой вариант. Вызываю функцию, в данной функции необходимо периодично вызывать другую функцию (или выполнять кую та часть кода в текущей функции). Но, вызывать ее так, чтобы не было никаких блокировок программы.
К примеру если в текущей функции
Код:
while (true){

   System.Threading.Thread.Sleep(500);

}
Программа будет зависать на время задержки. Из этого цикла нужно записать текст. Из первого примера в "txtBoxAns".

Код:
new Action(() =>{while (true){
    txtBoxAns.Text = "....";

    Thread.Sleep(5000);
}}).BeginInvoke(null, null);
Но на txtBoxAns.Text = "...."; выдает следующее
Цитата:
Исключение типа "System.InvalidOperationExcepti on" возникло в System.Windows.Forms.dll, но не было обработано в коде пользователя

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "txtBoxAns" не из того потока, в котором он был создан.

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

Последний раз редактировалось Predator199; 18.02.2015 в 10:51.
Predator199 вне форума Ответить с цитированием
Старый 18.02.2015, 10:45   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Примера у меня нет. Я не пишу в шарпее. И я не знаю что это за класс Action у тебя используется.
Action это просто делегат для метода. Например, чтоб передать его куда-то. Примерно как в Дельфи
Код:
type TMyAction = procedure(param1: TSomething) of object;
С потоками никак не связано, что автор хочет непонятно.

Если потоков, то вот небольшой пример и ссылки http://www.programmersforum.ru/showthread.php?p=1435608
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.02.2015, 10:51   #8
Predator199
Форумчанин
 
Аватар для Predator199
 
Регистрация: 26.01.2012
Сообщений: 648
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Увидев System.Threading.Thread.Sleep(5000) ; я решил что этот код используется в потоке.

System.Threading.Thread.Sleep(5000) ; - из другого варианта, что не пробовал, сколько не перепробовал. Не выходит...

Решил задачу...

Последний раз редактировалось Predator199; 18.02.2015 в 11:53.
Predator199 вне форума Ответить с цитированием
Старый 20.02.2015, 00:08   #9
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Делай

Код:
App.Current.Dispatcher.Invoke((Action)delegate
{
	txtBoxAns.Text = "....";
});
Ты, судя по всему, создаешь дополнительный поток, и из него пытаешься обратится к элементу в основном "UI" потоке, что невозможно напрямую. Данная конструкция посылает инструкцию в основной "UI" поток из любого другого.

Alex11223, многопоточность на C# - это самое простое, что мне приходилось усваивать после перехода с Delphi.
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Старый 20.02.2015, 00:18   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну я о том, что автор во всех своих темах показывает нежелание хоть как-то изучать и разбирать самостоятельно, а без знания теории с многопоточностью легко всякого наворотить.

App.Current.Dispatcher это WPF. (но по ссылке выше есть пример аналогичного и для винформс)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение кода ПОСЛЕ запуска программы Qaliti C# (си шарп) 11 16.03.2014 18:39
Стереть параметры запуска после запуска Anton911 Общие вопросы Delphi 18 14.04.2013 15:17
Проверить периодичность функций на Java. Astar Помощь студентам 0 23.10.2011 01:26
Периодичность в ini romanzi Общие вопросы Delphi 1 16.03.2011 01:45
Распознавание Аски кода и скан кода MyLastHit Общие вопросы Delphi 8 06.12.2010 18:34