AutoIT Progress Bar während Funktion
Hallo Leute,
ich würde gerne eine Progress Bar solange laufen lassen wie eine Funktion dauert in welcher ich eine Datei auslese.
Meine Funktion sieht so aus:
Da diese Funktion aber etwas dauert wollte ich eine Progress Bar für diese Zeit laufen lassen.
Diese habe ich so geschrieben:
gibt es eine Möglichkeit eine Progressbar gleichzeitig mit der Funktion laufen zu lassen ?
Multithreading ist ja nicht möglich in AutoIT aber evtl. gibt es ja einen Trick wie man das lösen könnte ?
Viellicht könnt ihr mir ja helfen
Gruß
Pytrelooc
ich würde gerne eine Progress Bar solange laufen lassen wie eine Funktion dauert in welcher ich eine Datei auslese.
Meine Funktion sieht so aus:
Func ComputeStatusFileRead()
Local $File_Pointer, $File_Line
Local $Count_Line
GUICtrlSetData($Edit_UserList, "")
If FileExists("c:\temp\" & $sCServerUser) Then
$File_Pointer= FileOpen("c:\temp\" & $sCServerUser,0)
IF $File_Pointer <> -1 Then
$Count_Line=1
While 1
$File_Line=FileReadLine($File_Pointer, $Count_Line)
If @error = -1 Then ExitLoop
$Count_Line = $Count_Line+1
; ConsoleWrite( $Count_Line & ' ' & $File_Line & @CRLF)
; User Liste ausgeben
GUICtrlSetData($Edit_UserList, $File_Line & @CRLF, 1)
WEnd
FileClose($File_Pointer)
EndIf
Else
MsgBox(0,"Error","File " & $sCServerUser & " could not be opened")
EndIf
EndFunc
Da diese Funktion aber etwas dauert wollte ich eine Progress Bar für diese Zeit laufen lassen.
Diese habe ich so geschrieben:
Func LoadingScreen()
local $progress = 0
while $progress <> 110
$progress+=1
guictrlsetdata($Progress1,$progress)
sleep(70)
WEnd
GUIDelete($Form5)
GUISetState(@SW_SHOW, $Form1)
EndFunc
gibt es eine Möglichkeit eine Progressbar gleichzeitig mit der Funktion laufen zu lassen ?
Multithreading ist ja nicht möglich in AutoIT aber evtl. gibt es ja einen Trick wie man das lösen könnte ?
Viellicht könnt ihr mir ja helfen
Gruß
Pytrelooc
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 227552
Url: https://administrator.de/forum/autoit-progress-bar-waehrend-funktion-227552.html
Ausgedruckt am: 23.04.2025 um 16:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo Pytrelooc,
warum machst du das Update der Progress-Bar nicht direkt aus der eigentlichen Funktion die die Arbeit erledigt, dort könntest du dann auch berechnen (anhand deines Counters) wie lange es noch dauert und die Progress-Bar entsprechend prozentual updaten.
Beispiel:
Grüße Uwe
warum machst du das Update der Progress-Bar nicht direkt aus der eigentlichen Funktion die die Arbeit erledigt, dort könntest du dann auch berechnen (anhand deines Counters) wie lange es noch dauert und die Progress-Bar entsprechend prozentual updaten.
Beispiel:
#NoTrayIcon
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
$Form1 = GUICreate("Form1", 296, 117, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Progress1 = GUICtrlCreateProgress(16, 16, 257, 25)
$btnStart = GUICtrlCreateButton("Start", 104, 64, 75, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "btnStartClick")
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Func btnStartClick()
GUICtrlSetState($btnStart,$GUI_DISABLE)
meineFunktion()
GUICtrlSetState($btnStart,$GUI_ENABLE)
EndFunc
Func Form1Close()
exit
EndFunc
Func meineFunktion()
$zeilen = 530
for $i = 1 to $zeilen
$percent = Round(($i / $zeilen) * 100,0)
GUICtrlSetData($Progress1,$percent)
Sleep(10)
next
EndFunc
Zitat von @pytrelooc:
ich verstehe leider nicht wo ich nun meinen Code platzieren muss damit die Progressbar parallel zur Ausführung abläuft.
ich weiß zwar nicht wie deine Form aufgebaut ist, aber im Prinzip sähe deine Function dann so aus:ich verstehe leider nicht wo ich nun meinen Code platzieren muss damit die Progressbar parallel zur Ausführung abläuft.
#include <File.au3>
Func ComputeStatusFileRead()
Local $File_Pointer, $File_Line
Local $Count_Line
GUICtrlSetData($Edit_UserList, "")
If FileExists("c:\temp\" & $sCServerUser) Then
$File_Pointer= FileOpen("c:\temp\" & $sCServerUser,0)
;Gesamtanzahl Zeilen in der Datei in Variable speichern
$anzahlZeilen = _FileCountLines("c:\temp\" & $sCServerUser)
IF $File_Pointer <> -1 Then
$Count_Line=1
While 1
$File_Line=FileReadLine($File_Pointer, $Count_Line)
If @error = -1 Then ExitLoop
$Count_Line = $Count_Line+1
; ConsoleWrite( $Count_Line & ' ' & $File_Line & @CRLF)
; User Liste ausgeben
GUICtrlSetData($Edit_UserList, $File_Line & @CRLF, 1)
;ProgressBar Wert setzen
$percent = Round(($Count_Line / $anzahlZeilen) * 100,0)
GUICtrlSetData($Progress1,$percent)
WEnd
FileClose($File_Pointer)
EndIf
Else
MsgBox(0,"Error","File " & $sCServerUser & " could not be opened")
EndIf
EndFunc
Das wäre nur mit MultiThreading möglich: http://www.autoitscript.com/forum/topic/29326-another-multi-process-hel ...
oder du baust dir ein zusätzliches AutoIt Script mit einer Form welche nur aus einer ProgressBar besteht, welche du aus deinem jetzigen Script aufrufst, und die dann nach dem Durchlauf deines Jobs durch dein Haupt-Script geschlossen wird.
Grüße Uwe
oder du baust dir ein zusätzliches AutoIt Script mit einer Form welche nur aus einer ProgressBar besteht, welche du aus deinem jetzigen Script aufrufst, und die dann nach dem Durchlauf deines Jobs durch dein Haupt-Script geschlossen wird.
Grüße Uwe