/// <summary>
        /// Initializes a new instance of the MainWindow class.
        /// </summary>
        public MainWindow()
        {
            this.InitializeComponent();


            _cam           = new KinectCam();
            _cam.NewImage += CamOnNewImage;

            _imageMixer = new ImageMixer(_cam.ColorFrameDescription.Width, _cam.ColorFrameDescription.Height);
            _imageMixer.BackgroundImage.LoadFile("Background.jpg");
            // TODO: Load background PNG file into BackgroundImage

            DataContext = _imageMixer;

            _client = new NetworkCamDriverClient();
            _client.Connect("127.0.0.1", 9090);
            // TODO: Not best way to connect :)
            Thread.Sleep(1000);

            // Start a separate thread for sending image
            _sendThread = new Thread(SendThreadLoop)
            {
                Name = "SendThread", IsBackground = true
            };
            _sendThread.Start();
        }
        private void CamOnNewImage(KinectCam sender, byte[] image)
        {
            // Copy to mixer
            _imageMixer.UpdateForeground(image);
            _imageMixer.RepaintFinishedImage();
            InvalidateImage(_imageMixer.ForegroundImage);
            InvalidateImage(_imageMixer.FinishedImage);

            // Trigger new copy to backbuffer and send
            _nextImageWaiter.Set();
        }