#mysql #vb.net #multithreading
#mysql #vb.net #многопоточность
Вопрос:
Я пытаюсь создать серверную программу для игры, мне нужно запустить 3 дополнительных потока в приложении Windows form. все потоки должны иметь доступ к одним и тем же переменным (thread1: собирается извлекать пользовательские команды из моей базы данных и выполнять их, thread2: собирается обновлять все пользовательские данные, а thread3: собирается отправлять все новые переменные обратно в базу данных.) Я просмотрел фоновые потоки, и я не уверен, будет ли это делать то, что я от них хочу (они выглядят так, как будто могли бы запускать мой код, но, похоже, им было бы трудно работать с одними и теми же переменными для всех потоков.)
Итак, я предполагаю, что мой вопрос заключается в том, возможно ли это и каков наилучший способ добиться этого, справятся ли фоновые рабочие и invoke с задачей? с какими проблемами я бы столкнулся при этом, у кого-нибудь есть идея получше.
Кстати, у меня возник еще один вопрос, связанный с тем, что я много раз пытался выполнить это, используя только простые потоки. Теперь, насколько я понимаю, выполнение всей моей работы в другом потоке не должно блокировать мой пользовательский интерфейс, однако это происходит. возможно, я делаю поток неправильно, мой код выглядит примерно так
dim newthread as new system.threading.thread(addressof runmycode)
newthread.start()`
этот код не является точным, но почему использование потоков, подобных этому, блокирует пользовательский интерфейс? Разве это не должно выполняться отдельно?
Ответ №1:
Вам нужно создать «новый» экземпляр класса object для «многопоточности» и предоставить функцию, которую вы хотите вызвать, например
Public Class MyNewCode
Public Function runmycode()
' My code goes here '
End Function
End Class
Public Class frmMain ' or under an onClick event or whatever.... '
Dim s As New MyNewCode ' This is the class above '
t = New System.Threading.Thread(AddressOf s.runmycode) ' This is the function above '
t.start()
End Class
Комментарии:
1. при условии, что это освобождает мой пользовательский интерфейс, я думаю, это именно то, что я ищу.
Ответ №2:
Вот руководство, которое я написал некоторое время назад, в котором рассказывается о создании базовой многопоточной программы в VB2008. С VB2010 вы можете удалить делегатов, если хотите, но идея практически та же.
Создание простой многопоточной виртуальной машины.Сетевое приложение