public void StartScrcpyServer(UsbDeviceEventArgs dev)
        {
            Task <int> task = new Task <int>(() =>
            {
                try
                {
                    OnVideoDataArrived cb = OnMirrorImageArrive;
                    RegistVideoCB(cb);
                    GC.KeepAlive(cb);
                    OnScrcpyLog cb2 = OnScrcpyLog1;
                    RegistScrcpyLogCB(cb2);
                    GC.KeepAlive(cb);
                    SetADBFolderPath(Marshal.StringToHGlobalAnsi(adb_path_)
                                     , Marshal.StringToHGlobalAnsi(adb_svr_path_));
                    IntPtr[] sbs = GetCommand($"-s {dev.GetSerial()} -m {Display_height} -b 2M");
                    var ret      = RunScrcpy(sbs.Length, sbs);

                    return(ret);
                }
                catch (Exception e)
                {
                    log_.Error($"StartScrcpyServer {e.ToString()}");
                }
                finally
                {
                    OnDeviceDisconnected?.Invoke(this, dev);
                    if (!adb_server_.GetStatus().IsRunning)
                    {
                        adb_server_.RestartServer();
                    }
                }
                return(-1);
            });

            task.Start();
        }
 extern static unsafe void RegistScrcpyLogCB(OnScrcpyLog funcScrcpyLogCB);