public override List<Image> Scan()
        {
            Console.WriteLine("Scan Twain");
            lesImagesNum.Clear();
            // can use the utility method to create appId or make one yourself
            var appId = TWIdentity.CreateFromAssembly(DataGroups.Image, Assembly.GetExecutingAssembly());

            // new it up and handle events
            session = new TwainSession(appId);

            session.TransferReady += session_TransferReady;
            session.DataTransferred += session_DataTransferred;
            session.SourceDisabled += session_SourceDisable;

            // finally open it
            session.Open();
            var t = session.GetEnumerator();

            Console.WriteLine(t.ToString());
            while (t.MoveNext())
            {
                Console.WriteLine(t.ConvertToString());
            }

            // choose and open the first source found
            // note that TwainSession implements IEnumerable<DataSource> so we can use this extension method.
            IEnumerable<DataSource> lesSources = session.GetSources();
            Console.WriteLine("Nb Source : " + session.Count());
            myDS = session.FirstOrDefault();
            myDS.Open();

            // All low-level triplet operations are defined through these properties.
            // If the operation you want is not available, that most likely means
            // it's not for consumer use or it's been abstracted away with an equivalent API in this lib.
            //myDS.DGControl;
            //myDS.DGImage.;

            // The wrapper has many methods that corresponds to the TWAIN capability triplet msgs like
            // GetValues(), GetCurrent(), GetDefault(), SetValue(), etc.
            // (see TWAIN spec for reference)

            // This example sets pixel type of scanned image to BW and
            // IPixelType is the wrapper property on the data source.
            // The name of the wrapper property is the same as the CapabilityId enum.
            PixelType typeCouleur = PixelType.Gray;

            if (myDS.Capabilities.ICapPixelType.CanSet &&
                myDS.Capabilities.ICapPixelType.GetValues().Contains(typeCouleur))
            {
                myDS.Capabilities.ICapPixelType.SetValue(typeCouleur);
            }

            //Même chose avec le DPI
            TWFix32 DPI = MainWindow.numerisationDPI;

            if(myDS.Capabilities.ICapXResolution.CanSet &&
                myDS.Capabilities.ICapXResolution.GetValues().Contains(DPI))
            {
                myDS.Capabilities.ICapXResolution.SetValue(DPI);
            }

            if (myDS.Capabilities.ICapYResolution.CanSet &&
                myDS.Capabilities.ICapYResolution.GetValues().Contains(DPI))
            {
                myDS.Capabilities.ICapYResolution.SetValue(DPI);
            }

            myDS.Enable(SourceEnableMode.ShowUI, false, System.IntPtr.Zero);

            EventWaitHandle session_SourceDisable_Wait = new EventWaitHandle(false, EventResetMode.AutoReset);
            session_SourceDisable_Wait.WaitOne();
            return lesImagesNum;
        }