Зависаю на Invoke (2)
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 11.11.21 21:46
Оценка:
Приветствую.
Для синхронизации потоков и UI выбрал следующее:
public void Invoke(MethodInvoker methodToInvoke)
{
    if (Disposing || IsDisposed) return;
    if (InvokeRequired)
    {
        BeginInvoke(methodToInvoke);
    }
    else
    {
        methodToInvoke();
    }
}

private void RefreshUI()
{
    Invoke(delegate
    {
    // взаимодействие UI
    });
}


Использую BeginInvoke, потому что на Invoke процесс зависал при закрытии формы. Подсказку нашёл там: http://rsdn.org/forum/dotnet.gui/1869795.flat#1869795
Автор: busybox
Дата: 27.04.06
, поэтому и тему так назвал.

Но сейчас возникла необходимость возвращать данные из UI.
Сделал так:
public object InvokeReturn(Func<object> methodToInvoke)
{
    if (Disposing || IsDisposed) return null;
    if (InvokeRequired)
    {
        var result = BeginInvoke(methodToInvoke);
        var ret = EndInvoke(result);
        return ret;
    }
    else
    {
        return methodToInvoke();
    }
}

private object ReturnObject()
{
    return (object)InvokeReturn(delegate
    {
        return (object)uiControl.Text;
    });
}


И теперь опять при закрытии формы зависаю на EndInvoke. Что не так?
Вселенная бесконечна как вширь, так и вглубь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.