B
billsahiker
Why is my application crashing on a windows 98 machine? It runs fine
on the development machine with xp pro. I installed framework 2, with
dotnetfx.exe, and windows installer 2 on the windows 98 machine. I
read here that dotnetfx does not have all of the framework. could that
be the problem?
Some of the functions work, others do not.
The ones that do not have one thing in common: they make an
asynchronous call to a method in a class library in the same VB
solution.I resesearched this topic in this group
and checked out the methods at msdn which indicates they are
supported on windows 98. What makes things interesting is that I added
two message boxes to see how far the code gets. The app crashes after
the first two message boxes, but before the third, and before reaching
the sub that makes the async call.
Private Sub btnQuickQuoteOK_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnQuickQuoteOK.Click
If Trim(txtQuickQuoteSymbol.Text) = "" Then
MsgBox("A symbol is required.") 'this works
Exit Sub
End If
If InStr(txtQuickQuoteSymbol.Text, ",") > 0 Then
MsgBox("One Symbol only") 'this works
Exit Sub
End If
'Me.Cursor = Cursors.WaitCursor 'commented out to rule this
one out.
MsgBox("calling ClearQuickQuote") 'added for debugging -
crashes before this point.
ClearQuickQuote()
MsgBox("calling getquotes") 'added for debugging
GetQuotes(Split(Trim(txtQuickQuoteSymbol.Text), ",")) 'makes
asynchronous call
'Me.Cursor = Cursors.Default
End Sub
Private Sub ClearQuickQuote()
txtLast.Text = ""
txtDayHi.Text = ""
txtDayLo.Text = ""
txtOpen.Text = ""
txtClose.Text = ""
End Sub
Private Sub GetQuotes(ByVal Symbols() As String)
' Create an instance of the test class.
Dim ad As New Async()
' Create the delegate.
Try
Dim caller As New AsyncMethodCaller(AddressOf
ad.GetQuotes)
' Initiate the asynchronous call
Dim result As IAsyncResult = caller.BeginInvoke(Symbols,
AddressOf CallbackMethod, _
caller)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
' Callback method must have the same signature as the
' AsyncCallback delegate.
Sub CallbackMethod(ByVal ar As IAsyncResult)
Dim returnValue As String = ""
' Retrieve the delegate.
Try
Dim caller As AsyncMethodCaller = CType(ar.AsyncState,
AsyncMethodCaller)
' Call EndInvoke to retrieve the results.
returnValue = caller.EndInvoke(ar)
Catch ex As Exception
MsgBox(ex.Message)
End Try
'need to implement a thread-safe way to reference a control on
the form to avoid a
'cross-thread access error.
SetData(returnValue)
End Sub
Private Sub SetData(ByVal HtmlString As String)
' InvokeRequired required compares the thread ID of the
' calling thread to the thread ID of the creating thread.
' If these threads are different, it returns true.
Try
If Me.WebBrowser1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetData)
Me.Invoke(d, New Object() {HtmlString})
Else
If BusTier.Buslayer.QuickQuote Then
FillQuickQuote(HtmlString)
Else
Me.WebBrowser1.DocumentText = HtmlString
End If
End If
Catch ex As Exception
Exit Sub
End Try
End Sub
on the development machine with xp pro. I installed framework 2, with
dotnetfx.exe, and windows installer 2 on the windows 98 machine. I
read here that dotnetfx does not have all of the framework. could that
be the problem?
Some of the functions work, others do not.
The ones that do not have one thing in common: they make an
asynchronous call to a method in a class library in the same VB
solution.I resesearched this topic in this group
and checked out the methods at msdn which indicates they are
supported on windows 98. What makes things interesting is that I added
two message boxes to see how far the code gets. The app crashes after
the first two message boxes, but before the third, and before reaching
the sub that makes the async call.
Private Sub btnQuickQuoteOK_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnQuickQuoteOK.Click
If Trim(txtQuickQuoteSymbol.Text) = "" Then
MsgBox("A symbol is required.") 'this works
Exit Sub
End If
If InStr(txtQuickQuoteSymbol.Text, ",") > 0 Then
MsgBox("One Symbol only") 'this works
Exit Sub
End If
'Me.Cursor = Cursors.WaitCursor 'commented out to rule this
one out.
MsgBox("calling ClearQuickQuote") 'added for debugging -
crashes before this point.
ClearQuickQuote()
MsgBox("calling getquotes") 'added for debugging
GetQuotes(Split(Trim(txtQuickQuoteSymbol.Text), ",")) 'makes
asynchronous call
'Me.Cursor = Cursors.Default
End Sub
Private Sub ClearQuickQuote()
txtLast.Text = ""
txtDayHi.Text = ""
txtDayLo.Text = ""
txtOpen.Text = ""
txtClose.Text = ""
End Sub
Private Sub GetQuotes(ByVal Symbols() As String)
' Create an instance of the test class.
Dim ad As New Async()
' Create the delegate.
Try
Dim caller As New AsyncMethodCaller(AddressOf
ad.GetQuotes)
' Initiate the asynchronous call
Dim result As IAsyncResult = caller.BeginInvoke(Symbols,
AddressOf CallbackMethod, _
caller)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
' Callback method must have the same signature as the
' AsyncCallback delegate.
Sub CallbackMethod(ByVal ar As IAsyncResult)
Dim returnValue As String = ""
' Retrieve the delegate.
Try
Dim caller As AsyncMethodCaller = CType(ar.AsyncState,
AsyncMethodCaller)
' Call EndInvoke to retrieve the results.
returnValue = caller.EndInvoke(ar)
Catch ex As Exception
MsgBox(ex.Message)
End Try
'need to implement a thread-safe way to reference a control on
the form to avoid a
'cross-thread access error.
SetData(returnValue)
End Sub
Private Sub SetData(ByVal HtmlString As String)
' InvokeRequired required compares the thread ID of the
' calling thread to the thread ID of the creating thread.
' If these threads are different, it returns true.
Try
If Me.WebBrowser1.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SetData)
Me.Invoke(d, New Object() {HtmlString})
Else
If BusTier.Buslayer.QuickQuote Then
FillQuickQuote(HtmlString)
Else
Me.WebBrowser1.DocumentText = HtmlString
End If
End If
Catch ex As Exception
Exit Sub
End Try
End Sub