static void DeviceProperty_Changed(DependencyObject sender, DependencyPropertyChangedEventArgs e) { // Get the sender CapPlayer typedSender = sender as CapPlayer; if ((typedSender != null) && (e.NewValue != null)) { // Make sure that we are not in design mode if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(typedSender)) { return; } // Unsubscribe from previous device CapDevice oldDevice = e.OldValue as CapDevice; if (oldDevice != null) { // Clean up typedSender.CleanUpDevice(oldDevice); } // Subscribe to new one CapDevice newDevice = e.NewValue as CapDevice; if (newDevice != null) { // Subscribe newDevice.NewBitmapReady += typedSender.device_OnNewBitmapReady; // Start newDevice.Start(); } } }
void initBitmap() { if (_device == null) { _device = new CapDevice(); _device.OnNewBitmapReady += new EventHandler(_device_OnNewBitmapReady); } else { _device.Start(); } }
/// <summary> /// Cleans up a specific device /// </summary> /// <param name="device">Device to clean up</param> void CleanUpDevice(CapDevice device) { // Check if there even is a device if (device == null) { return; } // Stop device.Stop(); // Unsubscribe device.NewBitmapReady -= device_OnNewBitmapReady; }
/// <summary> /// Invoked when a new bitmap is ready /// </summary> /// <param name="sender">Sender</param> /// <param name="e">EventArgs</param> void device_OnNewBitmapReady(object sender, EventArgs e) { // Create new binding for the framerate Binding b = new Binding(); b.Source = Device; b.Path = new PropertyPath(CapDevice.FramerateProperty); SetBinding(CapPlayer.FramerateProperty, b); // Get the sender CapDevice typedSender = sender as CapDevice; if (typedSender != null) { // Set the source of the image Source = typedSender.BitmapSource; } }