Seite 1 von 1
Menü blockiert Programm
Verfasst: 14.03.2016 10:31
von techniker
Hi,
ich habe festgestellt, dass wenn man ein Menü im laufenden Programm öffnet selbiges solange "stehen" bleibt..?!?
Kann man dies verhindern?
In meinem Programm muss ich zyklisch (alle 500ms) eine Netzwerk-Aktion ausführen. Bleibt diese aus wird ein Verbindungsabbruch detektiert.
Danke!
Re: Menü blockiert Programm
Verfasst: 14.03.2016 10:55
von Bisonte
Entweder lagerst du deine zyklische Netzwerkaktion in einen Thread aus, oder du benutzt AddWindowTimer()
Will heissen ein TimerEvent das alle 500ms ausgelöst wird. Damit sollte das Programm auch bei einem offenem Menü
weiter deine Netzwerkaktion ausführen. (Bei fehlerfreier Event-Behandlung

)
Re: Menü blockiert Programm
Verfasst: 14.03.2016 11:08
von matbal
Um genauer zu sein: Benutze AddWindowTimer zusammen mit BindEvent. Der EventLoop hält an, wenn das Menü geöffnet ist oder das Fenster verschoben wird.
Beispiel:
Code: Alles auswählen
EnableExplicit
Enumeration
#MainWin
#MainWin_Menu
#MainWin_Menu_Item1
#MainWin_Timer_1
EndEnumeration
Procedure TimerProc()
Debug "Timer Bindevent"
EndProcedure
OpenWindow(#MainWin, 100, 100, 400, 300, "Programm")
If CreateMenu(#MainWin_Menu, WindowID(0))
MenuTitle("Datei")
MenuItem(#MainWin_Menu_Item1, "Menü 1")
EndIf
AddWindowTimer(#MainWin, #MainWin_Timer_1, 500)
BindEvent(#PB_Event_Timer, @TimerProc(), #MainWin, #MainWin_Timer_1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Menu
Select EventMenu()
Case #MainWin_Menu_Item1
Debug "Menu 1"
EndSelect
Case #PB_Event_Timer
Select EventTimer()
Case #MainWin_Timer_1
Debug "Timer"
EndSelect
EndSelect
ForEver
Re: Menü blockiert Programm
Verfasst: 14.03.2016 11:51
von techniker
Danke matbal!
Der Tipp mit BindEvent ist Gold wert..
