2015-11-18 4 views
2

Я хочу сделать снимок экрана моего экрана, когда я нажимаю кнопку на окне. Проблема в том, что окно должно исчезнуть, прежде чем делать снимок экрана.Окно не исчезает на скриншоте

Вот мой код:

MainWindow:

private void OnButtonScreenshotClick(object sender, RoutedEventArgs routedEventArgs) 
{ 
    this.Visibility = Visibility.Hidden; 
    ScreenCapture capture = new ScreenCapture(); 
    this.Close(); 
    capture.Show();  
} 

ScreenCapture (Для того, чтобы показать скриншот)

public ScreenCapture() 
{ 
    InitializeComponent(); 
    this.ScreenCaptureImage.Source = Screenshot.TakeFullScreenshot(width, height); 
} 

Как вы можете видеть, я стараюсь, чтобы скрыть окно, прежде чем я инициализировать новый ScreenCapture-Window. Я также попытался установить задержку с Thread.Sleep, но это не сработает.

Вот мой код, чтобы сделать скриншот:

public static ImageSource TakeFullScreenshot(int width, int height) 
{ 
    Image bitmap = new Bitmap(width, height); 
    { 
     using (Graphics graphics = Graphics.FromImage(bitmap)) 
     { 
      graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), bitmap.Size); 
     } 
    } 
    return GetImageStream(bitmap); 
} 

private static BitmapSource GetImageStream(Image myImage) 
{ 
    var bitmap = new Bitmap(myImage); 
    IntPtr bmpPt = bitmap.GetHbitmap(); 
    BitmapSource bitmapSource = 
    System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
      bmpPt, 
      IntPtr.Zero, 
      Int32Rect.Empty, 
      BitmapSizeOptions.FromEmptyOptions()); 
    //freeze bitmapSource and clear memory to avoid memory leaks 
    //bitmapSource.Freeze(); 
    //DeleteObject(bmpPt); 
    return bitmapSource; 
} 

Есть предложения?

ответ

3

использовать это вместо этого.Close();

this.Hide(); 
+0

Хорошо, это было легко. Благодаря! Я приму свой ответ, как только смогу. – FKutsche

+0

@FKutsche просто добавьте код перед ScreenCapture() –

Смежные вопросы