我正在构建一个 UI,该 UI 由一个主表单以及其他表单和自定义类的可能实例组成。我仍然缺少的是记录错误的一致方式。所以我所做的是围绕所有可能产生错误的代码创建 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 放在哪里?以及如何在多个表单和类的多个线程中安全地使用此功能?
非常感谢您让我向您的大师学习:)