Получение значения свойства из элемента формы потокобезопасным способом - PullRequest
0 голосов
/ 22 сентября 2010

Я использую этот метод благодаря casperOne для установки значений свойств для элементов формы, если требуется вызов.

static void SynchronizedInvoke(ISynchronizeInvoke sync, Action action)
{
    // If the invoke is not required, then invoke here and get out.
    if (!sync.InvokeRequired)
    {
        // Execute action.
        action();

        // Get out.
        return;
    }

    // Marshal to the required thread.
    sync.Invoke(action, new object[] { });
}

Это работает:

// Set a label's text
SynchronizedInvoke(lblCurrCalStatus, () => lblCurrCalStatus.Text = "Downloading...");

По понятным причинам это не сработает:

// Retrieve a label's text
string calStatus = SynchronizedInvoke(lblCurrCalStatus, () => lblCurrCalStatus.Text);

Существует ли функция, аналогичная SynchronizedInvoke, которая может возвращать значение свойства?Для этого потребуется универсальный тип возврата и приведение типа так:

// Retrieve a label's text
string calStatus = (string)SynchronizedInvokeReturn(lblCurrCalStatus, () => lblCurrCalStatus.Text);

1 Ответ

0 голосов
/ 22 сентября 2010

Вы можете установить значение переменной внутри анонимного метода:

string calStatus = string.Empty;
SynchronizedInvoke(lblCurrCalStatus, () => calStatus = lblCurrCalStatus.Text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...