ඇත්තටම එහෙම නෙවෙයි වෙන්නේ.. Windows API වල තියෙනවා Windows Procedure කියලා Mechanism එකක් , මේ .NET වල නෑ තියෙන්නේ එතනිනුත් පහළ Layer එකේ
මේකේන් කරන්නේ OS එකට එන Messages ග්රහණය කරගන්න එකයි.. දැන් OS එකට Shutdown වෙන්න දැම්මම වෙන්නේ ,System එකෙන් යවනවා WM_CLOSE කියලා Message එකක් System Message Queue එකට, මේක Shared එකක් හැම Application එකක්ම තමන්ට අදාළ Messages ගන්න. සාමාන්යයෙන් GetMessage() කියන API Function එකට call කරාම මේ Application එකට අදාළ Message එක ගන්න පුලුවන්, ඊට පස්සේ මේ Message එක යන්නේ Windows Procedure එකට, මේක Function එකක් අපි ගන්න Messages Process කරන. ඊට පස්සේ මේ Messages එකට ලැබුන හැටියේම Application එක කරන්නේ Thread එක Close කරන එකයි , Thread වර්ග දෙකක් තියෙනවා Foreground, Background කියලා, Foreground Thread close වෙන්නේ ඊට අදාළ Task එක ඉවර වෙලයි, නමුත් Background threads application එක close වෙනකොටම close වෙනවා..
Thread exist වෙන්නේ නැත්නම්, OS එක කරන්නේ FORCE කරනවා ,මේක කරන්නේ WM_DESTROY කියන Message එක මගින් එතකොට PostQuitMessage(0) function එක switch case එකක් යටතට දාලා (Windows Procedure එක ඇතුලේ) අපිට පුලුවන් message එකක් යවන්න Message Queue එකට WM_QUIT කියලා, ඊට පස්සේ ඊළග Iteration එකේදි Application එක GetMessage() එකට Call කරලා Messages ගන්නකොට WM_QUIT නිසා return වෙන්නේ Application එක Terminate වෙනවා මොකද GetMessage() කියන Function එකට WM_QUIT ලැබුන හැටියේම වෙන්නේ -1 return වෙන එකයි GetMessage() function එකෙන්, මේක while loop එකක දැම්ම වෙන්නේ loop එක exist වෙන එකයි ඒ කියන්නේ application එක close වෙන එකයි..