Здравствуйте и спасибо за помощь. На этот раз у меня возникла любопытная проблема с программой (C#), которую я пишу, и хотел бы услышать ваш совет. Я пишу обычную программу (не многопоточную), но затем добавил таймер (System.Timers.Timer)Таймеры, файлы и условия гонки?
Также я использую StreamWriter для записи в файл. Я открываю это так:
StreamWriter logStream=new StreamWriter(filename, true);
означает, что если файл существует, он добавляет, если он не создает.
Позже я пишу в файле, как этого
logStream.WriteLine(message);
Однако, я пишу в поток из как основной функции и от функции, которая вызывается с помощью таймера.
проблемных симптомы
Моей программа бросает ошибку иногда когда я промывать или записать поток о том, что «не удается получить доступ к закрытому файлу» и другие времен «Не удается получить доступ к закрытой TextWriter ... (Что такое «TextWriter»?)
Однако любопытно, что файл продолжает быть написано без проблем. (Даже «не может получить доступ закрытого файла» сообщение записывается в предполагаемом закрытом файле)
Я не знакомы с внутренней работой таймера. (Я полагаю, что он запускает сеп arate нить?)
Мой вопрос
Можно ли использовать StreamWriter из нескольких потоков? (в этом случае основной и таймер один) Возможно ли, что происходит состояние гонки или какая-то проблема? более
одно: я сделал логическую ошибку и закрыть и повторно открыть файл каждый раз, когда я хочу, чтобы писать на нем. Да, это ошибка, и я должен ее исправить. Но, возможно, если я исправлю это, то описанная выше ошибка исчезнет, маскируя более серьезный недостаток.
Мои подозрения в том, что, так как я закрытия и открытия файла каждый раз, когда я пишу на нем, может быть, оба потока пытаются получить доступ к ним в то время
Любая помощь будет высоко оценен
К одному из ваших вопросов: StreamWriter - это специфический TextWriter. –
Вы пытаетесь создать реализацию каротажа? Почему бы вам не использовать.NET встроенный диагностический API или библиотека регистрации, например log4net? Журнальные библиотеки должны принимать запросы журналов из нескольких потоков, но все записи записывать правильно, не повреждая файл журнала. –