PictureBox の呼び出しで別の質問があり、3 種類のエラーが発生しました。特にConrad Frixからいくつかの素晴らしい回答がありました。そのため、問題がどこにあるのかを突き止めることができましたが、今はそれを修正するために 100% 確実ではありません。
基本的に、いくつかのイベントが真であることをチェックするWindowsフォームタイマーがあります。そうであれば、そのイベント(値)がしきい値を超えてから2秒後にデータを送信するようにシステムに指示します。
私が持っているすべてのタイマーは、画像を取得するためにいくつかの場所で使用する PictureBox で厄介な競合状態を作成していると思います。
new Bitmap(myPicBox.Image);
等...
タイマーの間隔は少なくとも 50 である必要があることをどこかで読みました。それを 33 から設定します。picCapture.InvokeRequired を実行して、基本的に死ぬかどうかを確認できることがわかりました。私はデリゲートを使用する必要があることを知っていますが、何かを設定するためにのみ使用しました...画像を取得するためではありません....それを設定する方法がわかりません...実際に何が原因であるかはわかっています、それはこれですコードの組み合わせ:
private void timer1_Tick(object sender, EventArgs e)
{
if(someCOnditionTrue)
{
TimerCallback tc = new TimerCallback(sendDataFast); //only
//doing all this so i can have the method run two seconds after
// the condition is detected to be true.
System.Threading.Timer t = new System.Threading.Timer(tc, null, 2000, Timeout.Infinite);
}
}
void sendDataFast(Object stateObject)
{
//using this so the execution is not haulted while the sending of data takes place.
EmergencyDelegate delEmergency =
new EmergencyDelegate(mic.sendEmergencyData);
Image imgclone;
if (picCapture.InvokeRequired)
{
Console.WriteLine("HFS Batman! its going to die ");
}
lock (lockObject2) //i admit no clue what im doing here and doesn't seem to help.
{
Image img = picCapture.Image;
imgclone = (Image)img.Clone();
}
delEmergency.BeginInvoke(imgclone, null, null); //deep in the call to
//sendEmergencyData i get the **ParameterNotValid** almost everytime.
imgclone.Dispose(); //to free memory?
}
以前の質問によると、timer1_tick イベントでメモリの問題やその他のエラーが発生しないようです... (メモリ不足エラーは 1 つでした)。
最大の問題は、画像データが必要なときに picCapture.InvokeRequired をどのように処理できるかだと思いますか? timer1_click内のスレッドタイマー呼び出しがこれを引き起こしていると確信しています....