У меня был еще вопрос на моих вызовах PictureBox, дающий мне 3 вида ошибок, некоторые отличные ответы пришли, в частности, от Конрад Фрикс .Так что это заставило меня выяснить, где моя проблема, но теперь, чтобы решить ее, я не уверен на 100%.
По сути, у меня есть таймер Windows Form, который проверяет, является ли какое-либо событие истинным, если оно есть, то он сообщает системе, что необходимо отправить некоторые данные через 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 ... (ошибка нехватки памяти была одна).
Я думаю, что самая большая проблема заключается в том, как я могу обработать picCapture.InvokeRequired, когда мне нужны данные изображения?Я уверен, что это вызов таймера потоков внутри timer1_click, который я делаю, который вызывает это ....