mad_Max » 30.11.2006 (Чт) 0:05
Во-первых, использовать напрямую методы (в т.ч. менять значения свойств) контролов (и форм) из других потоков мягко говоря нехорошо. Есть 4 безопасных для использования из любого потока метода - InvokeRequired, Ivoke(), BeginInvoke(), EndInvoke(). Если в каком-либо потоке InvokeRequired = True, значит для обращения к свойствам/методам формы (контрола) необходимо использовать Invoke/BeginInvoke. Они выполнят переданный им в качестве параметра делегат соответственно синхронно/асинхронно в том потоке, в котором форма была создана (т.е. корректно).
Во-вторых, что такое Form1? Класс? Экземпляр класса? Я давненько на VB.NET 2005 не писал; там что, опять дефолтовый экземпляр класса формы создается? Если так, то я бы рекомендовал все-таки определиться с понятиями, где класс, а где экземпляр, и хотя бы именовать их по-разному.
Доступ к переменной формы не требует Invoke/BeginInvoke, но если с этой переменной работает несколько потоков (а это почти наверняка так), необходимо обеспечить синхронизацию (если таковая не обеспечивается внутренним устройством класса "очередь") - критические области, семафоры, события и т.п.
Ну и наконец, есть такой атрибут ThreadStatic, который говорит о том, что отмеченное им статическое поле имеет уникальное значение для каждого потока (то, что он используется - весьма маловероятная ситуация).