Stop Button (Again)

I asked this ~10 years ago, but have forgotten what I did back then.

I have a panel interface where the user set some directories and starts the loop with a button.  Since the process can be long (1 hour +), there is a request for a stop button.  I would like to exit the loop after an image is processed and then continue to write a log file with the status of each image processed. I have the function and loop below.

Question: What do I need to do to read the button push once this function starts?

Function Run_Image_workflow()

    wave/T Images_to_Process
    string basepath,QP
    Pathinfo QuantPath
    QP = s_path
    NVAR ImagesLeft
    Nvar Halt =root:halt
    variable i,imax
    imax = dimsize(Images_to_process,0)
    for(i=0;i<imax;i+=1)
        //should image be run
       
        if (Stringmatch(Images_to_Process[i][%status], "not run")) //done and mask missing are skipped
           
            //summary
            Newpath/C/Q/O Pathsummary, (QP+Images_to_Process[i]+ ":summary")
            //image
            NewPath/C/Q/O PathImageOut, (QP+Images_to_Process[i]+ ":OutputImages")
            //sizes
            NewPath/C/Q/O Pathsizes, (QP+Images_to_Process[i]+ ":size")
            //textures
            NewPath/C/Q/O Pathtexture, (QP+Images_to_Process[i]+ ":texture")   
           
            process_image(i)
            ImagesLeft -=1 
            Images_To_process[i][%Status] ="done"
            if(halt)
                break
            endif
        endif
           
    endfor
    Save_log_file()
end

Function StopButton(ba) : ButtonControl
    STRUCT WMButtonAction &ba

    switch( ba.eventCode )
        case 2: // mouse up
            // click code here
            nvar halt =root:halt
            halt =1
            break
        case -1: // control being killed
            break
    endswitch

    return 0
End

Andy

Set up your panel as a "progress window" using DoUpdate/W=<panel>/E=1.

DisplayHelpTopic "Progress Windows"

Hi,

Thank you.  Also I put the do update in the loop just before I check.

This is what I ended up with

Andy

Function Run_Image_workflow()

    wave/T Images_to_Process
    string QP
    Pathinfo QuantPath
    QP = s_path
    NVAR ImagesLeft
    variable i,imax
    imax = dimsize(Images_to_process,0)
    for(i=0;i<imax;i+=1)
        //should image be run
       
        if (Stringmatch(Images_to_Process[i][%status], "not run")) //done and mask missing are skipped
           
            //summary
            Newpath/C/Q/O Pathsummary, (QP+Images_to_Process[i]+ ":summary")
            //image
            NewPath/C/Q/O PathImageOut, (QP+Images_to_Process[i]+ ":OutputImages")
            //sizes
            NewPath/C/Q/O Pathsizes, (QP+Images_to_Process[i]+ ":size")
            //textures
            NewPath/C/Q/O Pathtexture, (QP+Images_to_Process[i]+ ":texture")   
           
            process_image(i)
            ImagesLeft -=1 
            DoUpdate/W=setup /E=1
            Nvar Halt =root:halt
            Images_To_process[i][%Status] ="done"
            if(halt)
                break
            endif
        endif
           
    endfor
    Save_log_file()
end