Статические методы не могут получить доступ к состоянию экземпляра (например, нестатический элемент управления).Удалите static
из объявления метода или передайте ссылку на элемент управления в качестве аргумента метода:
private static void SomeMethod(ListBox listBox)
{
listBox.Items.Add("Some element");
}
... и вызовите его так:
SomeMethod(MyListBox);
Обновление
Существуют разные способы выполнения асинхронных операций в пользовательском интерфейсе (теперь предполагается использование winforms).Я бы порекомендовал вам изучить использование BackgroundWorker
(поиск здесь на SO; множество примеров).Если вы действительно хотите сделать это, создавая потоки самостоятельно, вот один из способов сделать это:
private void SomeMethod()
{
string newElement = FetchNextElementToAdd():
SafeUpdate(() => yourListBox.Items.Add(newElement));
}
private void SafeUpdate(Action action)
{
if (this.InvokeRequired)
{
this.BeginInvoke(action);
}
else
{
action();
}
}
... и назвать его:
Thread thread = new Thread(SomeMethod);
thread.Start();
Вы можететакже используйте пул потоков (предпочтительнее, чем создание собственных потоков, учитывая, что вы не ожидаете, что они будут работать очень долго):
ThreadPool.QueueUserWorkItem(state => SomeMethod());