_ArrayDisplay öffnet Dialog, zeigt aber nichts an und hängt

  • Hallo.

    Habe gerade ein merkwürdiges Problem.
    Wenn ich ein eindimensionales Array mit _ArrayDisplay anschauen möchte, öffnet sich zwar der Dialog davon, zeigt aber nichts an...
    Das Programm hängt dann irgendwie vor sich hin.

    Ich weiß leider nicht an was es liegt...
    Hat jemand eine Idee was man da drumherum testen könnte?

    Getestet in ISN wie auch Scite - Updates sind alle drauf.

    Grüße
    Björn

  • Ohne Skript werden wir dir nicht wirklich weiterhelfen können ;)

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

    • Offizieller Beitrag

    Zeig mal dein Script. Ich tippe mal drauf, das _ArrayDisplay innerhalb eines CallBacks oder einer Messageabfrage aufgerufen wird.

  • Hier ein Beispielscript:

    [autoit]

    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GUIConstants.au3>
    #include <GuiListBox.au3>
    #include <GuiButton.au3>
    #include <WinAPI.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <Timers.au3>
    #include <GUIConstantsEx.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global Const $STX = 0x02
    Global Const $ETX = 0x03

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Global $hGUI = GUICreate("Logger", 334, 205, -1, -1, BitOR($WS_MINIMIZE, $WS_MINIMIZEBOX), $WS_EX_WINDOWEDGE)
    $LogBox = GUICtrlCreateList("", 10, 10, 313, 136, BitOR($LBS_NOTIFY,$WS_VSCROLL,$WS_BORDER))
    $btnExit = GUICtrlCreateButton("Beenden",191,150,130,18,-1,-1)
    $HideBtn = GUICtrlCreateButton("Verberge Fenster",10,150,130,18,-1,-1)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit][autoit][/autoit][autoit]

    Global $FT_HANDLE, $received_stream = ""

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $iTimer = _Timer_SetTimer($hGUI,1000,"FTDI_ReceivedData")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func FTDI_ReceivedData($hWnd, $Msg, $iIDTimer, $dwTime)

    [/autoit][autoit][/autoit][autoit]

    Local $queue_items, $received_stream_temp

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $received_stream = "DasIst ein Test"
    ;******************* AUSWERTUNG *******************

    local $stream_array = StringToASCIIArray($received_stream)

    _ArrayDisplay($stream_array,"Stream")
    ConsoleWrite("ERR: " @error & @CRLF)

    local $resultSTX = _ArrayFindAll($stream_array,chr($STX))
    local $resultETX = _ArrayFindAll($stream_array,chr($ETX))

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($resultSTX,"STX")
    _ArrayDisplay($resultETX,"ETX")

    Exit

    EndFunc

    [/autoit]
    • Offizieller Beitrag

    _ArrayDisplay darf niemals innerhalb eines Timers verwendet werde. Scriftcrash ist da vorprogrammiert.
    Wenn du Werte ausgeben willst, mach das per ConsoleWrite.

    • Offizieller Beitrag

    Timer killen bringt da wenig, da das Timerevent ja hängt, bis die Funktion verlassen wird.

    Du kannst es mal mit AdlibRegister probieren, bei Aufruf der Funktion AdlibUnregister und am Ende der Funktion wieder AdlibRegister.

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GUIConstants.au3>
    #include <GuiListBox.au3>
    #include <GuiButton.au3>
    #include <WinAPI.au3>
    #include <Array.au3>
    #include <String.au3>
    #include <Timers.au3>
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global Const $STX = 0x02
    Global Const $ETX = 0x03

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("Logger", 334, 205, -1, -1, BitOR($WS_MINIMIZE, $WS_MINIMIZEBOX), $WS_EX_WINDOWEDGE)
    $LogBox = GUICtrlCreateList("", 10, 10, 313, 136, BitOR($LBS_NOTIFY,$WS_VSCROLL,$WS_BORDER))
    $btnExit = GUICtrlCreateButton("Beenden",191,150,130,18,-1,-1)
    $HideBtn = GUICtrlCreateButton("Verberge Fenster",10,150,130,18,-1,-1)
    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit]

    Global $FT_HANDLE, $received_stream = ""

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AdlibRegister("FTDI_ReceivedData",1000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func FTDI_ReceivedData()
    AdlibUnregister ("FTDI_ReceivedData")
    Local $queue_items, $received_stream_temp

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $received_stream = "DasIst ein Test"
    ;******************* AUSWERTUNG *******************

    [/autoit] [autoit][/autoit] [autoit]

    local $stream_array = StringToASCIIArray($received_stream)

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($stream_array,"Stream")
    ConsoleWrite("ERR: "& @error & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    local $resultSTX = _ArrayFindAll($stream_array,chr($STX))
    local $resultETX = _ArrayFindAll($stream_array,chr($ETX))

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($resultSTX,"STX")
    _ArrayDisplay($resultETX,"ETX")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AdlibRegister("FTDI_ReceivedData",1000)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]
  • Adlibunregister/Register hat nicht so funktioniert.
    Aber gut zu wissen, dass man das nicht darf.
    Dann debugge ich nun mit einen einmaligen Funktionscall ohne Timer und werfe den Timer wieder an wenn alles läuft wie es sollte.

    Danke auf jeden Fall für den Tipp!

    • Offizieller Beitrag

    Schau mein Edit, mit Adlib. Funzt doch ;)