Форум: "Прочее";
Текущий архив: 2010.02.14;
Скачать: [xml.tar.bz2];
ВнизАналог Application.ProcessMessages для С# Найти похожие ветки
← →
Гипербореец (2009-12-08 12:34) [0]Кто знает как это делать на C# ?
← →
clickmaker © (2009-12-08 12:43) [1]Application.DoEvents()
← →
Гипербореец (2009-12-08 12:48) [2]гуд! точно оно самое.
← →
Гипербореец (2009-12-08 12:56) [3]Пролог:
Диалог из ISQ:KNST
дарова умник 17:17:54
Игорёха
Добрый день 17:18:14
KNST
ну чего скажешь? 17:18:42
посмотри александр на связи 17:18:56
всмысле в аське 17:19:10
а ты вообще где сейчас дома или на работе? 17:19:32
Игорёха
я на работе. тружусь как стахановец 17:20:15
KNST
видел твой фильтр отчетов, который ты зляпал.. так ничего .. но что то ты его долго уж лепишь 17:20:55
Игорёха
фильтр ? 17:21:11
KNST
ну эта твоя прога цветная, которая выбирает отчеты об ошибках 17:22:04
Игорёха
так она и так уже больше того что планировалась делает. вот только кнопку остановить надо приделать 17:23:40
ты вируса удалял ? 17:25:57
KNST
это решается так ... когда ты нажимаешь пуск то у тебя работает цикл который непрерывается пока не закончит работу .. так вот в тело цикла надо вставлять специальную проседуру которая позволит обрабатывать системные сообщения типа "нажатия клавиш" и управления контролов.... Например в делфи уже это реализовано так, что в цикл вставляется процедура Application.proccessmesage; и более делать ничего не нужно .... ищи аналоги а C# в свойствах объекта Аpplication 17:30:40
Игорёха
событие от кнопки ? 17:31:42
KNST
Нет это я слишком грубый пример дал ... вот что нужно аналог Application.ProcessMessages - эта процедуда дает возможность контролам выполнять обработку событий самостоятельно .т.е. запущенный цикл будет прерываться на то что бы другие контролы успевали обрабатывать свои события.. теперь понятно? 17:34:35
Application.DoEvents() - это надо вставить тебе в начале цикла и будет гуд.. 17:43:03
Игорёха
DoEvents есть. 17:50:02
KNST
ну значит оно... 17:51:06
пробуй смотри.. 17:51:24
← →
Гипербореец (2009-12-08 13:18) [4]Продолжение следует:
Игорёха
а как остановить то ? 17:56:30
KNST
цикл? у тебя контролы теперь реагируют на события? 17:59:37
Игорёха
да реагируют 18:05:18
KNST
придумай переменную любую логического типа например "stop" перед запуском цикла присваивай ей значение false, а в цикле проверяй ее состояние если она станет истина то останавливай цикл в делфи будет так "Break" - выход из цикла или Exit - выход из под программ... 18:06:15
А и сделай кнопку в которой будет переменной "stop" присваиваться значение true - истина 18:07:38
вот пример на делфе делай по аналогииfor i:=1 to 10000000 do begin
18:14:35
Application.ProcessMessages;
if stop then Break; // - вот здесь произойдет выход из цикла
// ....................
// ...... твой любой код
// .....................
end;
Игорёха
не выходит по break 18:15:09
за идею спасибо стоп реальный будет. дальше проблемы какие-то с disposed object вылазят. 18:16:44
KNST
что у тебя в цикле творится? Чем он занят? может вызывает какие то процедуры, которые очень долго выполняются? 18:18:42
← →
clickmaker © (2009-12-08 13:23) [5]> [4] Гипербореец (08.12.09 13:18)
а пиво или чай какие пили во время разговора?
в чем задача-то? Давно бы вынес формирование отчета в отдельный поток
← →
Гипербореец (2009-12-08 13:29) [6]еще продолжение:
KNST
Еще лучше кинь код своего цикла я посмотрю может чего увижу. 18:25:07
Игорёха
using (StreamReader streamR = new StreamReader(logfile0, Encoding.Default))
{
while (streamR.Peek() >= 0 )//| stopcycle == true)
{
Application.DoEvents();
string LogLine = streamR.ReadLine();
if (LogLine.IndexOf("INFO", 0) > 0)
countI++;
if (LogLine.IndexOf("DEBUG", 0) > 0)
countD++;
if (LogLine.IndexOf("WARN", 0) > 0)
countW++;
if (LogLine.IndexOf("ERROR", 0) > 0)
countE++;
if (LogLine.IndexOf("FATAL", 0) > 0)
countF++;
if (((LogLine.IndexOf("INFO", 0) > 0) && chkLevelI.Checked) || ((LogLine.IndexOf("DEBUG", 0) > 0) && chkLevelD.Checked) ||
((LogLine.IndexOf("WARN", 0) > 0) && chkLevelW.Checked) || ((LogLine.IndexOf("ERROR", 0) > 0) && chkLevelE.Checked) ||
((LogLine.IndexOf("FATAL", 0) > 0) && chkLevelF.Checked) )
{
if (((LogLine.IndexOf("Ошибка сети", 0) > 0) && chkErrorNet.Checked == false))
{
}
else if (((LogLine.IndexOf("Ошибка не сети", 0) > 0) && chkErrorNotNet.Checked == false))
{
}
else
{
edFileText.AppendText("------------------------------" + logfile0m[logfile0m.Length - 1] + "-------------------------------------" + "\r\n");
edFileText.AppendText(LogLine + "\r\n");
}
}
} 18:25:49
Если, кто может помогите, а то я не совсем понимаю C#
← →
Гипербореец (2009-12-08 13:33) [7]
> clickmaker © (08.12.09 13:23) [5]
> > [4] Гипербореец (08.12.09 13:18)а пиво или чай какие
> пили во время разговора?в чем задача-то? Давно бы вынес
> формирование отчета в отдельный поток
Это спантанно мы ничего не пили, я только чай со сгущенкой...
А проблема то такая, что у человека не останавливается процесс обработки цикла. Когда запускает процесс то все приложение зависает и не начто не реагирует. Я ему решил помочь из самых лучших побужденией.
← →
clickmaker © (2009-12-08 13:40) [8]а смысл второй раз делать LogLine.IndexOf("INFO", 0) > 0 и пр. ?
если "дальше проблемы какие-то с disposed object вылазят", то, видимо, где-то есть обращение по уже недействительной ссылке.
Ну примерно как в дельфи сказали obj.Free, а потом пытаемся попользовать труп obj
← →
Гипербореец (2009-12-08 13:59) [9]Мда, жаль, видимо не получится помочь, так как человек слишком уж начинающий и просто многих вещей не понимает вообще.
← →
Вариант (2009-12-08 14:11) [10]
> Гипербореец (08.12.09 13:29) [6]
В
> clickmaker © (08.12.09 13:23) [5]
дан хороший совет.
По коду -
постаравшись догадаться, думаю, что проблема была в
> while (streamR.Peek() >= 0 )//| stopcycle == true)
Комментарий поставил потому что так как не работало???
Если да, то -
по нажатию кнопки Stop например ставим stopcycle=true; (изначально stopcycle должен быть инициализирован false)
А цикл (условие) переделываем такwhile ((streamR.Peek() >= 0 ) && (stopcycle == false))
Кстати тут меня всегда интерисовало -а зачем streamR.Peek, почему сразу не streamR.ReadLine()? ( наверное потому что так в примере MSDN и возможно проще читается условие )
Но проблемы с таким кодом будут, сильно упрощено это. А что будет, нажми мы на крестик формы - закрытие приложения (а цикл-то крутится -> убьем сами себя мучительным способом)?
Ситуацию будет контролировать сложнее, а это приводит к мысли, что подход на мой взгляд не верный, ибо как мне кажется надо таки вернуться к совету в [5].
← →
Гипербореец (2009-12-08 14:33) [11]
> Вариант (08.12.09 14:11) [10]
Я не зря привел переписку для того, что бы было видно на сколько человек не понимает многих вещей. Мне не мало услилий потребовалось, что бы объяснить даже такой примитив. С потоками я ему уже вряд ли смогу помочь, слишком долго придется возится и объяснять, все равно скажу - может быть дойдет.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.02.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c