Новый DataContext Just Crashes; Без исключений

Вопрос:

Я создаю службу Windows в VB.NET, которая будет циклически переходить через набор функций на неопределенный срок, поэтому необходима потоковая обработка. Вы не можете просто запустить цикл в OnStart(); он должен вернуться к Service Controller.

Моя программа полностью сбой после New DataContext без каких- либо исключений или чего-то еще.

Я удалил много кода, который кажется мне неактуальным, чтобы лучше видеть основной код проблемы. Я удалил все блоки Try и изменил типы Meter типы Object, поэтому вы можете копировать и вставлять в основном рабочий код.

Я знаю, что это проблема с DataContext и потоками, которые я не понимаю. Здесь обсуждается проблема MultiThreading и DataContext. Что конкретно я делаю неправильно?

Public Class Molly
Dim stopping As Boolean = False
Dim stoppedEvent As Threading.ManualResetEvent

Protected Overrides Sub OnStart(ByVal args() As String)

'vv~~~~ If these two are uncommented, my code fails at an indeterminate place AFTER the New ConfigInterpreter below.
'Dim Example1 As New LocalDBDataContext
'Dim Example2 As New ConfigInterpreter

Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf ThreadWorker))
End Sub

Protected Overrides Sub OnStop()
stopping = True
stoppedEvent.WaitOne()
End Sub

Private Sub ThreadWorker()
Dim MyCI As New ConfigInterpreter '<~~~~ 'My program fails here every time,
'unless the two lines above are uncommented,
'then it fails at a random point after this.

Dim ListOfMeters as List(Of Meter) = MyCI.CompileListOfMeters()

While stopping = False
For Each mtr In ListOfMeters()
mtr.Read()
Next

Threading.Thread.Sleep(My.Settings.CheckIntervalMS)
End While

stoppedEvent.Set()
End Sub
End Class 'Molly

Public Class ConfigInterpreter
Public Sub New()
Try

Dim LocalDB As New LocalDBDataContext '<~~~~~~~ My program typically crashes here.

Catch ex As Exception '<~~~~ No exception is thrown.

End Try
End Sub

Public Function CompileListOfMeters() As List(Of Object)
Dim LocalDB As New LocalDBDataContext
Dim qMeters As IQueryable(Of tblMeter) = From ff In LocalDB.tblMeters
Select ff

Dim ReturnList As New List(Of Object)
For Each mtr In qMeters
ReturnList.Add(mtr)
Next

Return ReturnList
End Function
End Class 'ConfigInterpreter

Оцените статью
TechArks.Ru
Добавить комментарий