четверг, 11 октября 2012 г.

WindowsForm InvokeRequired

Суть проблемы простая: устанавливая значения контрола из другого потока, ты рискуешь словить эксепшен.
Решение:

public static class ControlExtentions
{
/// 
/// Вызов делегата через control.Invoke, если это необходимо.
/// 
/// Элемент управления
/// Делегат с некоторым действием
public static void InvokeIfNeeded(this Control control, Action doit)
{
if (control.InvokeRequired)
control.Invoke(doit);
else
doit();
}
}

и вызов nextLineProgressBar.InvokeIfNeeded(()=>nextLineProgressBar.Minimum = 0);

А смысл этого действа в том что при присвоении значения из другого потока, WinForm очень сильно ругается.

Подсмотрено тут http://sergeyteplyakov.blogspot.com/2009/03/windows-forms-controlinvoke.html

PS можно конечно и старым методом описанным на MSDN, но так по моему красивей  

Комментариев нет: