Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логирование 
:(
    Опции темы
pa6kevi4
  Дата 30.6.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.9.2009

Репутация: нет
Всего: нет



Здравствуйте! Вот сижу уже , мучаюсь с заданием. Срочно нужна ваша помощь.

Нужно чтобы ЭТО запускалось в отдельном потоке. ЧТОБЫ ОСТАЛЬНАЯ ЧАСТЬ ПРОГРАММЫ, ВЫЗЫВАЮЩАЯ ЭТОТ КЛАСС, НЕ ЖДАЛА ЕГО ВЫПОЛНЕНИЯ, А ПРОСТО ПЕРЕДАВАЛА ЕМУ ЗНАЧЕНИЯ.

Код

    public class TxtLogger : ILogger
    {
        private FileStream f1;
        private StreamWriter output;
        protected string FileName = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Folder\\Output1.txt";
        protected string CurrentLogText;

        protected ThreadStart myThreadDelegate;
        protected Thread thr;

        public TxtLogger()
        {
            f1 = new FileStream(FileName, FileMode.Append);
            output = new StreamWriter(f1);
        }

        public void Log(string message, MessageType messageType)
        {
            lock (this)
            {
                CurrentLogText = "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType;
                output.WriteLine(CurrentLogText);
                f1.Flush();
                output.Flush();
            }
        }
    }



Сверху описано:

Код

        protected ILogger lg1 = new TxtLogger();
        protected ILogger lg2 = new XmlLogger();
        protected ILogger lg3 = new DbLogger();

        protected MessageGenerator[] arr;



Код

                  arr = new MessageGenerator[numberOfGen];
                    
                    for (int c = 0; c < arr.Length; c++)
                    {
                        arr[c] = new MessageGenerator(numberOfGen, mseconds);

                        if (checkBox1.Checked)
                        {
                            arr[c].MessageGeneratedEvent += new MessageGenerator.MyDelegate(lg1.Log);
                        }
                        if (checkBox2.Checked)
                            arr[c].MessageGeneratedEvent += new MessageGenerator.MyDelegate(lg2.Log);
                        if (checkBox3.Checked)
                            arr[c].MessageGeneratedEvent += new MessageGenerator.MyDelegate(lg3.Log);
                        arr[c].go();                      
                    }


 smile 
PM MAIL   Вверх
pa6kevi4
Дата 30.6.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 15.9.2009

Репутация: нет
Всего: нет



 smile 
PM MAIL   Вверх
ZmeyNet
Дата 1.7.2010, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 25.1.2008
Где: Belarus, Minsk

Репутация: нет
Всего: нет



1) где Using? почему он не рядом с FileStream
2) lock (this)  -- не есть гуд самого себя лочить
3) не вижу никакой обработки IO ошибок 


Простое решении  (заметь я не сказал верное) : оберни метод лог и в обертке создавай новый поток.

Решение посложнее : состоит в том , чтобы записывать логи порциями 1 раз в еденицу времени скажем если у тебя множество логов пишется , то логер будет раз в 2-3 секунды или реже проверять наличие входящих сообщений и записывать их.
PM MAIL ICQ Skype   Вверх
Mephisto
Дата 4.7.2010, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Я бы рекомендовал не изобретать велосипед, а воспользоваться готовым решением log4net. И время сэкономишь и результат получишь хороший.

Добавлено через 4 минуты и 1 секунду
А если необходимо именно так сделать, то попробуй посмотреть в сторону делегата и BeginInvoke. Только нужно сделать писание потокобезопасным.
PM   Вверх
jonie
Дата 5.7.2010, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Mephisto, еще есть System.Diagnostic .... log4net конечно удобен, но "нестандартен"...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Mephisto
Дата 5.7.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Цитата(jonie @  5.7.2010,  10:11 Найти цитируемый пост)
Mephisto, еще есть System.Diagnostic .... log4net конечно удобен, но "нестандартен"... 

Согласен. Но с System.Diagnostic нужно еще с правами разбираться, особенно если апликуха впервые запускается под правами пользователя в ХР, или в 7-ке с недоадмином. При попытке открыть лог из System.Diagnostic падает. Разве что писать в общак, что не совсем гуд.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0647 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.