Межпоточная операция недействительна в родительском контроле

Я использую следующий код для обновления метки в моем классе, которая расширяет UserControl:

private delegate void LabelChanger(bool signedIn);

public bool SignedIn
{
    get { return _signedIn; }
    set
    {
        _signedIn = value;
        labelChanger(value);
    }
}

private void labelChanger(bool signedIn)
{
    if (label1.InvokeRequired)
    {
        BeginInvoke(new LabelChanger(labelChanger), signedIn);
    }
    label1.Text = signedIn ? "Sign Out" : "Sign In";
}

Проблема в том, что когда код устанавливает текст метки, пользовательский интерфейс обновляется, однако я получаю исключение InvalidOperationException на панели, которая является родителем метки. Есть идеи, почему? Спасибо.


person Jurgen Camilleri    schedule 03.05.2013    source источник
comment
Взгляните на InnerException и трассировку стека этого InvalidOperationException.   -  person JeffRSon    schedule 03.05.2013


Ответы (1)


label1.Text = signedIn ? "Sign Out" : "Sign In"; выполняется, даже если вы находитесь не в том потоке. Вы должны заключить его в else {}.

person Dirk    schedule 03.05.2013