初めまして、現在C#にて非同期処理を使ったプログラムを作成しています。

経緯として、ある外部機器のメモリ空間に、一定の値を連続して書き込むものを作りたいと考えました。
その項目にチェックボックスを入れると、チェック中はasync/awaitを利用し、非同期処理で書き込む処理を続ける、というものを作りました。

ですが、同じ構造のものを複数作り、3つほどチェックを入れると、UIがフリーズしてしまいます。
メモリへの書き込みは出来ているため、アプリケーションは落ちていないようです。

UIが固まるのはどういった原因が考えられるのでしょうか。

    #region Always UAV

    private async void kpUAV_CheckedChanged( object sender , EventArgs e )
    {
        if ( kpUAV.Checked )
        {
            while ( kpUAV.Checked )
            {
                ulong targetClient = 0x21A8164 + (0x17010 * (ulong)kpSelectClient.Value ) ;
                PS4.WriteMemory( this.processID , targetClient + 0x714      , new byte[]{ 0x01 } ) ; // UAV1
                PS4.WriteMemory( this.processID , targetClient + 0xBC74     , new byte[]{ 0x01 } ) ; // UAV2
                PS4.WriteMemory( this.processID , targetClient + 0x16F9C    , new byte[]{ 0x01 } ) ; // UAV3
                await Task.Run( ( ) => { Thread.Sleep( 150 ) ; } ) ;
            }
        }
        else
        {
            ulong targetClient = 0x21A8164 + (0x17010 * (ulong)kpSelectClient.Value ) ;
            PS4.WriteMemory( this.processID , targetClient + 0x714      , new byte[]{ 0x00 } ) ; // UAV1
            PS4.WriteMemory( this.processID , targetClient + 0xBC74     , new byte[]{ 0x00 } ) ; // UAV2
            PS4.WriteMemory( this.processID , targetClient + 0x16F9C    , new byte[]{ 0x00 } ) ; // UAV3
        }
    }

    #endregion

    #region Always VSAT

    private async void kpVSAT_CheckedChanged( object sender , EventArgs e )
    {
        if ( kpVSAT.Checked )
        {
            while ( kpVSAT.Checked )
            {
                ulong targetClient = 0x21A8164 + (0x17010 * (ulong)kpSelectClient.Value ) ;
                PS4.WriteMemory( this.processID , targetClient + 0x718      , new byte[]{ 0x01 } ) ; // VSAT1
                PS4.WriteMemory( this.processID , targetClient + 0xBC78     , new byte[]{ 0x01 } ) ; // VSAT2
                PS4.WriteMemory( this.processID , targetClient + 0x16FA0    , new byte[]{ 0x01 } ) ; // VSAT3
                await Task.Run( ( ) => { Thread.Sleep( 150 ) ; } ) ;
            }
        }
        else
        {
            ulong targetClient = 0x21A8164 + (0x17010 * (ulong)kpSelectClient.Value ) ;
            PS4.WriteMemory( this.processID , targetClient + 0x718      , new byte[]{ 0x00 } ) ; // VSAT1
            PS4.WriteMemory( this.processID , targetClient + 0xBC78     , new byte[]{ 0x00 } ) ; // VSAT2
            PS4.WriteMemory( this.processID , targetClient + 0x16FA0    , new byte[]{ 0x00 } ) ; // VSAT3
        }
    }

    #endregion

    #region Laser locator

    private async void kpLaserLocator_CheckedChanged( object sender , EventArgs e )
    {
        if (  kpLaserLocator.Checked )
        {
            while (  kpLaserLocator.Checked )
            {
                ulong targetClient = 0x21A8164 + (0x17010 * (ulong)kpSelectClient.Value ) ;
                PS4.WriteMemory( this.processID , targetClient + 0x782      , new byte[]{ 0x01 } ) ; // Point laser1
                PS4.WriteMemory( this.processID , targetClient + 0xBCE2     , new byte[]{ 0x01 } ) ; // Point laser2
                PS4.WriteMemory( this.processID , targetClient + 0x17740    , new byte[]{ 0x01 } ) ; // Point laser3
                await Task.Run( ( ) => { Thread.Sleep( 150 ) ; } ) ;
            }
        }
        else
        {
            ulong targetClient = 0x21A8164 + (0x17010 * (ulong)kpSelectClient.Value ) ;
            PS4.WriteMemory( this.processID , targetClient + 0x782      , new byte[]{ 0x00 } ) ; // Point laser1
            PS4.WriteMemory( this.processID , targetClient + 0xBCE2     , new byte[]{ 0x00 } ) ; // Point laser2
            PS4.WriteMemory( this.processID , targetClient + 0x17740    , new byte[]{ 0x00 } ) ; // Point laser3
        }
    }

    #endregion

左のチェックボックスを3つほどつけるとUIがフリーズします