Кажется случайным, что я получу исключение перекрестной резьбы при выполнении моего приложения формы выигрыша. Вот как я пытаюсь управлять им:Непредсказуемое исключение кросс-потоков
private void ToOutput(string s)
{
if (!this.IsHandleCreated)
this.CreateHandle();
if (FormOutputArea.InvokeRequired)
{
FormOutputArea.Invoke(new Action(delegate()
{
FormOutputArea.AppendText(s + Environment.NewLine);
}));
}
else
{
FormOutputArea.AppendText(s + Environment.NewLine);
}
}
Оказывается InvokeRequired
не всегда точны. Я пробовал BeginInvoke
с тем же результатом.
EDIT: Даже когда я проверяю IsHandleCreated
и InvokeRequired
с помощью контрольных точек они настроены так, однако else
ветвь состояния выполняется.
Вот скриншот, показывающий, где исключение теперь брошено:
Возможно, вы захотите посмотреть на следующее: http://stackoverflow.com/questions/808867/invoke-or-begininvoke-cannot-be-called-on-a-control-until-the-window-handle- имеет – Styxxy
Даже ручка управления проверкой не помогла. Я сбив с толку, почему исключение потока выбрасывается один раз, когда выполняется пять раз (вероятность 20%) подряд. – Lee
* Даже когда я проверяю IsHandleCreated и InvokeRequired с помощью точек останова, они установлены в true, но ветвь else выполняется. * Можете ли вы показать этот код, что вы пробовали в этом? –