i am Using a loop inside my GUI Program , but when the loop starts , i can’t teriminate my program or even move it , it halts
so i have to wait until the loop ends so i can move or close the program
the problem is the loop in infinite While(1) , so i can’t wait it until it ends 
so how can i solve this Problem
You would want to run the loop in the background - so you would want to use the Start-Job cmdlet then run your loop inside of it.
$process = 'explorer.exe'
Start-Job -argumentlist $process {
param($process)
while ((Get-Process $process).Responding) {Sleep -Milliseconds 1000}
if (!(Get-Process $process).Responding) {'Do the thing'}
}
It depends on what you’re doing in the loop but a timer might solve the problem.
i can’t understand what should i do ,
this code is meaningless for me
why using process explorer and how when it’s not responding i do my stuff ?
i am not Dealing with explorer.exe any way i am dealing with my main form and the loop which take action when i submit my needs
i dealing with a registry entry , i want it to run for ever , but when user wants to close the program he should be able to and terminate the process , but the form is not responding to terminate it
So, yes, a timer should work fine. Add a timer to the form, have it fire every X seconds to perform your action. Your form should be responsive and close when needed.