Я создаю пользовательский интерфейс, который состоит из одной основной формы с возможными экземплярами дополнительных форм и пользовательских классов. То, что я все еще пропускаю, является последовательным способом регистрации ошибок. Поэтому я создал блоки try-catch для всего кода, который может генерировать ошибки, в основном для обработки входящих данных. Я получаю постоянный поток данных (JSON) с какого-то сайта, поэтому встроенная многопоточная функциональность фреймворка делает его многопоточным приложением. Опять же, многопоточность - это встроенная функциональность, я сам этим не занимаюсь, поскольку я еще не настолько умен, с точки зрения C #. ;)
Для части регистрации у меня есть код ниже от здесь . Несмотря на то, что я еще не настолько умен, думаю, я действительно понимаю, что там происходит. Моя проблема / вопрос, однако, заключается в следующем: как реализовать механизм многопоточного ведения журнала, который записывает ошибки в ОДИН кросс-класс кросс-формы файла журнала.
Вот пример, который вы можете использовать ссылку:
// MyMainForm.cs
namespace MyNameSpace
{
public partial class MyMainForm : Form
{
FooClass MyClass = new FooClass(); //<< errors could occur here
Form f = new MyForm(); //<< errors could occur here
... //<< errors could occur here
}
}
// FooClass.cs
namespace MyNameSpace
{
public class FooClass
{
public string ErrorGeneratingMethod()
{
try...catch(Exception e) { /* Write to Log file */ }
}
}
}
// Don't really know where to put this...
private static ReaderWriterLockSlim _readWriteLock = new ReaderWriterLockSlim();
public void WriteToFileThreadSafe(string text, string context)
{
string t = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
string path = Properties.Settings.Default.FQLogFileLocation;
// Set Status to Locked
_readWriteLock.EnterWriteLock();
try
{
// Append text to the file
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("[" + t + "]["+ context + "]" + text);
sw.Close();
}
} catch (Exception e)
{
MessageBox.Show(e.Message); // Really Exceptional (should never happen)
}
finally
{
// Release lock
_readWriteLock.ExitWriteLock();
}
}
Итак, для меня важно знать, куда мне поместить WriteToFileThreadSafe () вместе с _readWriteLock?
И как мне безопасно использовать эту функцию в нескольких потоках в разных формах и классах?
Большое спасибо заранее за то, что позволили мне учиться у ваших гуру:)