Одним из решений будет добавление члена static
в MyClass, например:
public class MyClass
{
public static ListView MyListView { get; set; }
public static void LogMethod(string level, string message)
{
Console.WriteLine("l: {0} m: {1}", level, message);
var logListView = MyListView;
if (logListView != null) {
logListView.Items.Add(Message);
}
// Do some other actions
}
}
Вы можете установить значение MyListView
в какой-либо другой части вашего приложения, когда оно будет доступно.
Хотя это решение будет работать, я бы не предпочел его, потому что оно нелогично.То, что вы делаете здесь, это объявляет в статической конфигурации цель журнала, которая вообще не имеет смысла в статическом контексте: вы хотите войти в элемент управления пользовательского интерфейса, который не был создан, нет хорошего способа ссылаться на него, пока приложение неПользовательский интерфейс был показан, и пользовательский интерфейс будет отображаться в некотором пункте или (академически говоря), может быть, совсем не так.
Я считаю, что предпочтительно создать свой собственный целевой класс журнала, производный отTarget
или TargetWithLayout
.Вы можете передать любые необходимые параметры (например, экземпляр ListView
) в конструктор цели журнала и программно добавить цель журнала в тот момент, когда значения этих параметров станут известны (т. Е. Отображается пользовательский интерфейс, и у нас есть ListView
мы можем сослаться на).