DispatcherTimer & Slider = System.StackOverflowException

  • WPF

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DispatcherTimer & Slider = System.StackOverflowException

    Hallo erst mall
    Habe folgendes Problem

    VB.NET-Quellcode

    1. Imports System.Windows.Threading
    2. Class MainWindow
    3. Declare Sub OPENCOM Lib "PORT" (ByVal A As String)
    4. Declare Sub TXD Lib "PORT" (ByVal Wert As Integer)
    5. Declare Sub RTS Lib "PORT" (ByVal Wert As Integer)
    6. Declare Sub DTR Lib "PORT" (ByVal Wert As Integer)
    7. Declare Sub CLOSECOM Lib "PORT" ()
    8. 'Dim g As Graphics
    9. Dim p As Integer = 0
    10. Dim i As Integer = 0
    11. Private dpTimer As DispatcherTimer
    12. Public Sub Ne()
    13. dpTimer = New DispatcherTimer
    14. 'MsgBox("")
    15. dpTimer.Interval = TimeSpan.FromMilliseconds(500 + CInt(Slider.Value * 100))
    16. AddHandler dpTimer.Tick, AddressOf TickMe
    17. dpTimer.Start()
    18. End Sub
    19. Private Sub TickMe()
    20. Dim openstring As String = "COM1: baud=19200 data=8 parity=N stop=1"
    21. If p = 1 Then
    22. Try
    23. OPENCOM(openstring)
    24. RTS(0)
    25. Catch ex As Exception
    26. End Try
    27. If i = 0 Then
    28. TXD(1)
    29. cantxd.Background = Brushes.Green
    30. DTR(0)
    31. candrt.Background = Brushes.Red
    32. ElseIf i = 1 Then
    33. RTS(1)
    34. canrts.Background = Brushes.Green
    35. TXD(0)
    36. cantxd.Background = Brushes.Red
    37. ElseIf i = 2 Then
    38. DTR(1)
    39. candrt.Background = Brushes.Green
    40. RTS(0)
    41. canrts.Background = Brushes.Red
    42. End If
    43. i += 1
    44. If i = 3 Then
    45. i = 0
    46. End If
    47. Else
    48. dpTimer.Stop()
    49. Exit Sub
    50. End If
    51. End Sub
    52. Private Sub bttport_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles bttport.Click
    53. Try
    54. If p = 0 Then
    55. Dim openstring As String = "COM1: baud=19200 data=8 parity=N stop=1"
    56. Try
    57. OPENCOM(openstring)
    58. canport.Background = Brushes.Green
    59. RTS(0)
    60. Slider.IsEnabled = False
    61. Ne()
    62. p = 1
    63. Catch ex As Exception
    64. MsgBox(ex.Message)
    65. End Try
    66. Else
    67. CLOSECOM()
    68. canport.Background = Brushes.Red
    69. p = 0
    70. TXD(0)
    71. cantxd.Background = Brushes.Red
    72. dpTimer.Stop()
    73. RTS(0)
    74. canrts.Background = Brushes.Red
    75. DTR(0)
    76. candrt.Background = Brushes.Red
    77. Slider.IsEnabled = True
    78. dpTimer = New DispatcherTimer
    79. End If
    80. Catch ex As Exception
    81. End Try
    82. End Sub
    83. End Class



    Das bei den hier geposteten Programm immer dan wen ich den timer anhalte und den slider verschiben will folgende Fehlermeldung kommt

    Eine nicht behandelte Ausnahme des Typs "System.StackOverflowException" ist in mscorlib.dll aufgetreten.

    aber nur solange die MsgBox nicht drin ist

    VB.NET-Quellcode

    1. Public Sub Ne()
    2. dpTimer = New DispatcherTimer
    3. 'MsgBox("")
    4. dpTimer.Interval = TimeSpan.FromMilliseconds(500 + CInt(Slider.Value * 100))
    5. AddHandler dpTimer.Tick, AddressOf TickMe
    6. dpTimer.Start()
    7. End Sub


    hier noch der xaml code

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. Title="MainWindow" Height="174" Width="142">
    5. <Grid Background="#52000000">
    6. <Button Content="Port an/aus" Height="23" HorizontalAlignment="Left" Margin="12,70,0,0" Name="bttport" VerticalAlignment="Top" Width="90" />
    7. <Canvas Background="{x:Null}" Height="23" HorizontalAlignment="Left" Margin="44,41,0,0" Name="canport" VerticalAlignment="Top" Width="26" />
    8. <Canvas Height="23" Margin="12,12,0,0" Name="cantxd" VerticalAlignment="Top" HorizontalAlignment="Left" Width="26" />
    9. <Canvas Margin="44,12,0,0" Name="canrts" Width="26" Height="23" VerticalAlignment="Top" HorizontalAlignment="Left" />
    10. <Canvas Height="23" Margin="76,12,0,0" Name="candrt" Width="26" HorizontalAlignment="Left" VerticalAlignment="Top" />
    11. <Slider Height="23" HorizontalAlignment="Left" Margin="8,100,0,0" Name="Slider" VerticalAlignment="Top" Width="100" SelectionEnd="5" />
    12. </Grid>
    13. </Window>
    Ich weiß jetzt nicht, was den Fehler veruracht, aber Du kanns ja mal den Fehler provozieren und dann in der Aufrufliste (Google "Visual Studio Aufrufliste anzeigen") nachschauen, was aufgerufen wurde (von unten nach oben).
    Weiters frage ich mich, warum Du nicht die System.IO.Ports.SerialPort-Klasse verwendest, sondern diese komischen importierten Methoden.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Du kanns ja mal den Fehler provozieren und dann in der Aufrufliste (Google "Visual Studio Aufrufliste anzeigen") nachschauen
    ka was du meinst? bin noch relative unerfahren

    und zu den tehma warum ich die dll verwende

    was ich hier mache ist ausbildungs inhalt und auf windows Froms bezogen ich muss mir das selber auf WPF umstellen da mein ausbilder selber noch nie mit WPF gearbeitet hatt

    Blackcat schrieb:

    ausbildungs inhalt und auf windows Froms bezogen ich muss mir das selber auf WPF umstellen da mein ausbilder selber noch nie mit WPF gearbeitet hatt
    Kannste vergessen.
    Wpf basiert auf einer ganz anneren Denkweise als WinForms, und daher kommt nur Crap dabei raus, wenn man "WinForms umstellen auf Wpf" versucht.

    Ich würde dir von Wpf erstmal ganz abraten, lern stattdessen Winforms richtig, das könnte deinem Ausbildungs-Abschluß nützen.

    Wpf würde ich dir allenfalls als Freizeit-Vergnügen empfehlen, welches nix mitte Ausbildung zu tun hat.
    Weil so grundlegend neue Dinge lernt man besser ohne jeden Druck dahinter: MVVM–Pattern (Josh Smiths Artikel)

    Und guck auch mal in' Wpf-Tutorial-Bereich.
    nur Crap kommt dabei gans sicher nicht raus (ich über nehms ja net 1 zu 1 ich beu mir nur das WPF so das es das gleiche macht wie das Windows Forms)
    und ich brauche das da ich im ramen meiner ausbildung ein Praktikum absolwiere ( aller 6 monate 1 ) in den ich mit WPF arbeiten muss

    da ich eine überbetriebliche ausbildung absolviere steht kein druck dahinter
    naja, ich würde schon eine wpf-Anwendung, die nicht nachm MVVM-Pattern aufgebaut ist, als Crap bezeichnen.
    Wird mir sicher auch widersprochen, aber ich glaub, das ist doch weitgehender Konsenz unter Leuten, die sich damit auskennen. Jdfs. auf myCSharp im Wpf-Bereich tut auch keiner was ohne MVVM, und auf CodeProject kannste ja mal die Artikel durchgucken, ob und wieviele unter den hoch-gerateten wpf-Artikeln an MVVM vorbei-gecodet sind.
    gut das MVVM-Pattern kenn bzw kannte ich noch nicht

    aber das würde sich auch nicht endern wen ich windows forms kennen würde ^^

    dem entsprechend schon mall danke an den hinweis mit den MVVM (habe es erst mall kurtz überflogen)

    das mit den crap naja sind zwar ohne MVVM keine schönen programme aber trotsdem fubnktions tüchtig deshalb auch kein crap

    aber davon mall zurück zu mein Problemm bzw zu meiner frage

    mich interesiert nur wiso das Programm mit der msgbox funktioniert und ohne nicht obwohl die so rein garnix macht.

    wollte es nur wissen da ja irgend was falsch sein muss und ich nicht drauf komme

    PS. werden versuchen mich in MVVM rein zu lessen und danach meine nächste programme zu erstellen
    deinen Code könnemer hier glaub nicht debuggen. DA sind zu viele hier unbekannte Rahmenbedingungen drin.
    Ausserdem die ganzen TryCatchens - da bekommt man ja garkeine Fehlermeldung, wenn eine Exception auftritt.
    ZB habich keine Ahnung, in welcher Zeile der Fehler ühaupt auftritt - weißt du's?
    Wen ich das wüste ^^
    das ding ist ja er trit immer nur dan auf wen ich den slider zum 2. mall verschibe (beim verschieben giebts keineanweisung)
    also müste der fehler ja im steuerelement ligen (was ich wiederum bezweifel)

    so amrande wen du msgbox(ex.message) nach cathe eingiebst bekommste fehlermeldungen