1

私のアプリケーションは約5分間正常に実行され、次にSystem.ArgumentException下のスクリーンショットに示すようにランダムにスローされます。 ここでの大きな問題は、両方の引数が実際に正しいように見え、約5分間完全に正常に動作することです。私のアプリケーションは、別のスレッドで画面のスナップショットを撮り続けます。

次のコードは画面のスナップショットを取得System.ArgumentExceptionし、このスニペットで発生します(スクリーンショットと同じ)。

Bitmap SNew = new Bitmap(NewRes.Width, NewRes.Height);
using (Graphics g = Graphics.FromImage(SNew))
    g.CopyFromScreen(0, 0, 0, 0, new Size(NewRes.Width, NewRes.Height));

同じ例外がCopyFromScreenメソッドでも発生する可能性がありますが、同じように見えるNewRes値が同じです(私のスニペットの最初の行では発生していません)。

An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll


このコードをtry { } catch { }句に入れると、それも正常に機能します(例外がログに約10回ポップアップした後、例外は発生しなくなります)。もちろん、これは優れた解決策ではありません。アプリケーションを再起動するまでスクリーンショットをまったく撮らずに、その例外の範囲内で永遠にハングし続けることがあります。

なぜ引数が無効なのか、何が原因なのかわかりません。何か案は?

4

1 に答える 1

1

私が確実に提供できるのは、Windows API と直接相互運用するためにCopyFromScreenusing を使用する代わりに、同じ出力を生成する具体的な代替手段です。platform invokeここで完全な例を見つけることができます.ハンス・パッサンの質問への回答としての礼儀はここにあります.

ただし、例外が発生している理由を確実に伝えることはできませんが、このスレッド(偶然にも Hans を nobugz としてフィーチャーしている)などの他の情報源CopyFromScreenと、バグのある私自身の経験から推測できます。メモリリークに悩まされています。私がリンクしたスレッドを考慮して、ターゲット フレームワークは .NET Framework のどのバージョンですか?

于 2013-01-10T16:59:44.933 に答える