static void Main(string[] args)
        {
            try
            {
                // Initialize StApi before using.
                using (CStApiAutoInit api = new CStApiAutoInit())

                    // Create a system object for device scan and connection.
                    using (CStSystem system = new CStSystem())

                        // Create a camera device object and connect to first detected device.
                        using (CStDevice device = system.CreateFirstStDevice())

#if ENABLED_ST_GUI
                            // If using GUI for display, create a display window here.
                            using (CStImageDisplayWnd wnd = new CStImageDisplayWnd())
#endif
                            // Create a DataStream object for handling image stream data.
                            using (CStDataStream dataStream = device.CreateStDataStream(0))
                            {
                                // Displays the DisplayName of the device.
                                Console.WriteLine("Device=" + device.GetIStDeviceInfo().DisplayName);

                                // Register callback method. Note that by different usage, we pass different kinds/numbers of parameters in.
#if ENABLED_ST_GUI
                                object[] param = { wnd };
                                dataStream.RegisterCallbackMethod(OnCallback, param);
#else
                                dataStream.RegisterCallbackMethod(OnCallback);
#endif
                                // Start the image acquisition of the host (local machine) side.
                                dataStream.StartAcquisition();

                                // Start the image acquisition of the camera side.
                                device.AcquisitionStart();

                                // Keep getting image until Enter key pressed.
                                Console.WriteLine("\r\nPress Enter to exit.");
                                Console.ReadLine();

                                // Stop the image acquisition of the camera side.
                                device.AcquisitionStop();

                                // Stop the image acquisition of the host side.
                                dataStream.StopAcquisition();
                            }
            }
            catch (Exception e)
            {
                // If any exception occurred, display the description of the error here.
                Console.Error.WriteLine("An exception occurred. \r\n" + e.Message);
            }
        }
        /// <summary>
        /// 非同步取得影像的OnCallback函數無法順利執行(目前不使用)
        /// </summary>
        /// <returns></returns>
        public Bitmap CaptureToImageAsyn()
        {
            try
            {
                stImage = null;
                bmp     = null;
                CStPixelFormatConverter m_Converter = new CStPixelFormatConverter();

                dataStream.RegisterCallbackMethod(OnCallback);
                dataStream.StartAcquisition(1);
                device.AcquisitionStart();

                if (SpinWait.SpinUntil(() => stImage != null, 10000))
                {
                    device.AcquisitionStop();
                    dataStream.StopAcquisition();

                    bool isColor = CStApiDotNet.GetIStPixelFormatInfo(stImage.ImagePixelFormat).IsColor;
                    if (isColor)
                    {
                        // Convert the image data to BGR8 format.
                        m_Converter.DestinationPixelFormat = eStPixelFormatNamingConvention.BGR8;
                    }
                    else
                    {
                        // Convert the image data to Mono8 format.
                        m_Converter.DestinationPixelFormat = eStPixelFormatNamingConvention.Mono8;
                    }
                    m_Converter.Convert(stImage, imageBuffer);
                    byte[]       imageData = imageBuffer.GetIStImage().GetByteArray();
                    MemoryStream ms        = new MemoryStream(imageData);
                    bmp = (Bitmap)Bitmap.FromStream(ms);
                }
                else
                {
                    throw new Exception("Camera(" + device.GetIStDeviceInfo().DisplayName + ") can not capture image!!");
                }
            }
            catch (Exception ex)
            {
                device.AcquisitionStop();
                dataStream.StopAcquisition();

                throw ex;
            }
            return(bmp);
        }