Creat0R
Ты наверное заметил что во время работы цикла также недоступна обработка системного события (т.е. Выход из GUI). Я думаю, единственный путь привязать функцию к основному циклу. Может кто-то считает по другому?
Код:

Opt("GuiOnEventMode", 1)
#include <GUIConstants.au3>
Global $StartProgress=0, $i=0
$gui = GUICreate("Abort GUI", 420, 140, -1, -1, $WS_SIZEBOX)
$Button = GUICtrlCreateButton("Start", 180, 20, 70)
GUICtrlSetOnEvent($Button, "SetExitLoop")
GUISetOnEvent(-3, "ExitScript")
$Progress = GUICtrlCreateProgress(60, 60, 300, 15)
GUISetState(@SW_SHOW)
While 1
Sleep(10)
If $StartProgress = 1 Then
Button()
EndIf
WEnd
Func Button()
$i=$i+1
If $i=101 Then
$i=0
EndIf
GUICtrlSetData($Progress, $i)
EndFunc
Func SetExitLoop()
If $StartProgress=1 Then
$StartProgress = 0
GUICtrlSetData($Button, "Start")
Else
$StartProgress = 1
GUICtrlSetData($Button, "Abort")
EndIf
EndFunc
Func ExitScript()
Exit
EndFunc