Я всего лишь n00b при утилизации предметов, поэтому я прошу прощения -
Итак, у меня есть класс «Logger», в котором у меня есть источник данных и привязка. Я хотел, чтобы весь мой пользовательский интерфейс был в другом проекте, поэтому, когда пользовательский интерфейс устанавливает свой DataSource для GridControl, он использует следующий метод -
public SystemEventLog()
{
InitializeComponent();
ConnectionLogGrid.DataSource = Logger.ConnectionLog.GetBindingSource(this);
ExceptionLogGrid.DataSource = Logger.ExceptionLog.GetBindingSource(this);
SystemLogGrid.DataSource = Logger.SystemLog.GetBindingSource(this);
}
Соответствующий метод в классе Logger выглядит так -
private static Control LogControl;
public static BindingSource GetBindingSource(Control LogControl)
{
if (Logger.ConnectionLog.LogControl == null)
{
Logger.ConnectionLog.LogControl = LogControl;
if (Source == null)
{
Source = new BindingSource()
{
DataSource = GetTable()
};
}
return Source;
}
else
{
Logger.SystemLog.AddEntry("Logging", "A second binding source has attempted to bind to the Connection Log.", "Logger.ConnectionLog.GetDataSource");
return null;
}
}
И вот как вещи в других местах программы добавляют запись в журнал ...
public static void AddEntry(string Message, Log.ConnectionCategory ConnectionCategory)
{
if (Logger.ConnectionLog.LogControl != null)
{
if (Logger.ConnectionLog.LogControl.InvokeRequired)
{
Logger.ConnectionLog.LogControl.Invoke((MethodInvoker)delegate
{
ThreadWrapper(Message, ConnectionCategory);
});
}
else
{
ThreadWrapper(Message, ConnectionCategory);
}
}
else
{
ThreadWrapper(Message, ConnectionCategory);
}
}
Всякий раз, когда я закрываю программу, я получаю Исключение, в котором говорится, что я пытался получить доступ к элементу управления, который уже был удален - где и как я должен им распоряжаться? Каков фактический объект, который вызывает ошибку?
Спасибо заранее,
William