
ウインドウズフォームアプリでピクチャーボックスにスクリーンショットを取りづづけリアルタイムにデスクトップの画像
表示を行いたいです。
該当のソースコードだと1回キャプチャして表示するだけなら問題ありませんが、
無限ループにするとうまくいきません。
このようなことはできないでしょうか?
発生している問題・エラーメッセージ
graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), bitmap.Size);にて
型 'System.ArgumentException' のハンドルされていない例外が System.Drawing.dll で発生しました
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace WindowsFormsApplication3 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 19 Task.Run(capScreen); 20 21 } 22 23 public Task capScreen() 24 { 25 while (true) 26 { 27 // プライマリスクリーン全体 28 Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); 29 Graphics graphics = Graphics.FromImage(bitmap); 30 // 画面全体をコピーする 31 graphics.CopyFromScreen(new Point(0, 0), new Point(0, 0), bitmap.Size); 32 // グラフィックスの解放 33 graphics.Dispose(); 34 35 Invoke((MethodInvoker)delegate 36 { 37 pictureBox1.Image = bitmap; 38 }); 39 } 40 } 41 } 42}

> ウィンドウズフォームアプリで・・・
> WPFでピクチャーボックスに・・・
何を言っておるんですかね?

どの行でその例外が出るのかぐらいは書きませんか。
なんで Task.Run なんですか? UI スレッドでないスレッドで pictureBox1.Image = bitmap; とかできるんですか?

「graphics CopyFromScreen ArgumentException」などをキーワードにググって調べることはしましたか?
ググってヒットする記事に ”Bitmap クラスや Graphics クラスが内部的に利用している GDI+ はメモリ不足の時に引数が不正というエラー(.NET では ArgumentException)といったよくわからないエラー(例外)を出すことがあります” ・・・と書いてありますがそれでは?

質問者さん、無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。

> 解決方法は勤務中なので後ほど。
どうなりましたか?

回答5件
あなたの回答
tips
プレビュー