2016-01-22 2 views
0

Моя программа vb.net загружается с ClassA. Во время запуска программы я вызываю класс B, который выполняет некоторые процессы. во время обработки ClassB он вызывает подпрограмму в ClassA (класс основной программной формы), но когда я это делаю, я обнаружил, что вся инициализация класса A встречается снова, т.е. снова начинается ДЕКЛАРАЦИЯ переменных класса, а подпрограмма NEW происходит снова.Класс vb.net перезагружается, когда подпрограмма классифицируется из другого класса

- NB: Это происходит только в том случае, если я запускаю класс B у фонового работника. Если ClassB был вызван из основного потока Form1, эта ошибка не появляется.

вот код:

Public Class Form1 
Dim g As String = "adsfadsf" 

Public Sub New() 
    InitializeComponent() 
End Sub 
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    BackgroundWorker1.RunWorkerAsync() 
End Sub 
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork 
    Dim clsB As New ClassB 
    clsB.st() 
End Sub 
Public Sub UpdateView() 
    ' do update here 
End Sub 
End Class 


Public Class ClassB 
Public Sub st() 
    Form1.UpdateView() 
End Sub 
End Class 

Любая обратная связь?


Похоже, что работник фона является проблемой, поскольку он теряет ссылку на родительский поток. Обходной путь - передать ссылку на основную нить, затем использовать эту ссылку для вызова конкретной подпрограммы Я пробовал и работал отлично

ответ

0

Любой код? (Невозможно добавить комментарий: /).

Вы можете объявлять новый экземпляр ClassA каждый раз, когда вы делаете ссылку в процедуре ClassB.

Что вы можете сделать, если ClassA - это своего рода модуль, который хранит общие функции, просто использует его как общий класс и общие методы, если это реальная проблема.

+1

Привет, и добро пожаловать в переполнение стека. Это просто сообщение, которое я отправляю новым членам, чтобы немного помогать. Кривая обучения для нового пользователя не крутая как таковая, но выяснение того, как использовать стек, не всегда очевидно. Пожалуйста, займите несколько минут и посмотрите здесь [ask] и здесь [mcve] .. Также, если ответ действительно для вас, нажмите на галочку слева от ответа, чтобы вопрос был отмечен как ответ и это гарантирует, что человек, который разместил его, получает репутацию. Приветствия. –

+0

@ Давид Уилсон: спасибо за помощь! – Abner

+0

Нет проблем. Добавление кода значительно облегчило понимание того, что было не так. –

Смежные вопросы