2010-09-22 3 views
0

Я использую этот метод courtesy of 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); 

ответ

0

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

string calStatus = string.Empty; 
SynchronizedInvoke(lblCurrCalStatus,() => calStatus = lblCurrCalStatus.Text); 
+0

Спасибо, что работает! – Pieter

Смежные вопросы