У меня есть делегат Action:DataGridView.Invoke замерзает
public static Action SubscribeForTable;
Я загрузил его с моим Objects
методом
public void SubscribeMe()
{
Parallel.For(0, ACCESS.GetAppCount(), AppCheck);
CheckTable(true);
}
Так что я есть делегат, который содержит ту же самую функцию, но и для различных объектов.
Тогда я делаю это:
Parallel.Invoke(SubscribeForTable);
Так он начал работать, и я жду ... жду ... и ничего не происходит! Приложение застряло! Затем я начал свой отладчик.
SubscribeMe()
возвращение к функции
Parallel.For(0, ACCESS.GetAppCount(), AppCheck); //OK
CheckTable(true); // lets see what is in
Потом я посмотрел на эту функцию ..
delegate void CheckTableCallback(bool check);
private void CheckTable(bool Subscribed)
{
if (DataGridView1.InvokeRequired) // OK
{
CheckTableCallback Safe = new CheckTableCallback(CheckTable); // OK
DataGridView1.Invoke(Safe, new Object[] {Subscribed}); //HANGS HERE!
}
else
{
....
Так он висит на DataGridView.Invoke
. Почему так? Надеюсь, я правильно объяснил свою проблему.
Использование Invoke() может вызвать взаимоблокировку, всегда благоприятствует BeginInvoke(). Этот тупик вызван тем, что поток пользовательского интерфейса занят, обычно ожидая завершения рабочего потока. Он не должен ждать. Используйте Debug + Windows + Threads для отладки. –