Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
Application.ProcessMessages;
if stop then Break; // - вот здесь произойдет выход из цикла
// ....................
// ...... твой любой код
// .....................
end;
 18:14:35

Игорёха
не выходит по 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
15-1260221418
Юрий
2009-12-08 00:30
2010.02.14
С днем рождения ! 8 декабря 2009 вторник


1-1237192368
Kolan
2009-03-16 11:32
2010.02.14
Дополнение перечисления


15-1260088479
Clone
2009-12-06 11:34
2010.02.14
хп на ноут


15-1260214408
Павел33333
2009-12-07 22:33
2010.02.14
Копирование программы с одного компьютера на другой.Не пашет.


2-1260883760
Лёша
2009-12-15 16:29
2010.02.14
Turbo Pascal и файлы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский