[ANN] Generic InvocationHelper
Generic InvocationHelper
A generic class for providing thread-safe invocation of delegates. Can be used for (but not limited to) updating GUI elements from another thread.
- Искренне ваш,
Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re: [ANN] Generic InvocationHelper
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Generic InvocationHelper
SDB>A generic class for providing thread-safe invocation of delegates. Can be used for (but not limited to) updating GUI elements from another thread.
Как минимум, тип T должен быть не параметром класса, а метода. Тогда его можно было бы указывать не два раза
InvocationHelper<EventHandler >.Invoke(
new EventHandler (delegate {
outputTextBox.Text = serialPort.ReadExisting();
})
);
а один
InvocationHelper.Invoke(new EventHandler (delegate {
outputTextBox.Text = serialPort.ReadExisting();
}));
или
InvocationHelper.Invoke<EventHandler >(delegate {
outputTextBox.Text = serialPort.ReadExisting();
});
... << RSDN@Home 1.2.0 alpha rev. 652>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: [ANN] Generic InvocationHelper
Здравствуйте, _FRED_, Вы писали:
_FR>Как минимум, тип T должен быть не параметром класса, а метода. Тогда его можно было бы указывать не два раза
Так, Слава, глядишь — и я под твоим руководствои Шарп начну осваивать помаленьку.
А хочешь, я тебе взамен что-нибудь про WTL/MFC буду рассказывать?
- Искренне ваш,
Поросенок Пафнутий ~ ICQ#116846877
In Windows, there’s always a catch… © Paul DiLascia
Re[3]: [ANN] Generic InvocationHelper
От:
_FRED_
Дата: 29.09.06 06:47
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Так, Слава, глядишь — и я под твоим руководствои Шарп начну осваивать помаленьку. А хочешь, я тебе взамен что-нибудь про WTL/MFC буду рассказывать?
Конечно, хочу
... << RSDN@Home 1.2.0 alpha rev. 652>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re: [ANN] Generic InvocationHelper
Hello, "SchweinDeBurg"
> Generic <br />
<span class='lineQuote level1'>> InvocationHelper</span>
>
> > A generic class for providing thread-safe invocation of delegates. Can be
> used for (but not limited to) updating GUI elements from another thread.
А в чем смысл сего произведения?
Я так понимаю, что предлагается использовать конструкции вида:
private void btnOpenport_Click(object sender, EventArgs e)
{
this .serialPort.Open();
}
private void serialPort_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
InvocationHelper<EventHandler>.Invoke(new EventHandler(delegate (object
sender, EventArgs e){ this .outputTextBox.Text =
this .serialPort.ReadExisting(); }));
}
А не проще сразу написать:
private void btnOpenport_Click(object sender, EventArgs e)
{
this .serialPort.Open();
}
private void serialPort_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{
if (InvokeRequeried)
{
Invoke(delegate { serialPort_DataReceived(sender, e); });
}
else
{
this .outputTextBox.Text = this .serialPort.ReadExisting();
}
}
Либо, если хочется "поднавернуть кода", можно сделать реализацию которую
использовать в виде serialPort.DataReceived +=
EventHelper.BindToThread(serialPort_DataReceived) ?
PS.
Да и вообще, предложенный подход "безопасным" не назовешь... достаточно,
написать следующее ... и все "уедет"
TextBox textBox = outputTextBox;
InvocationHelper<EventHandler>.Invoke(new EventHandler(delegate (object
sender, EventArgs e){ textBox.Text = "Done" ; }));
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: [ANN] Generic InvocationHelper
От:
squiz
Дата: 29.09.06 20:16
Оценка:
Здравствуйте, TK, Вы писали:
TK>А не проще сразу написать:
TK>TK>private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
TK>{
TK> if (InvokeRequeried)
TK> {
TK> Invoke(delegate { serialPort_DataReceived(sender, e); });
TK> }
TK> else
TK> {
TK> this .outputTextBox.Text = this .serialPort.ReadExisting();
TK> }
TK>}
TK>
А выделенное разве скомпилируется?
Разве что так (и InvokeRequired надо видимо у outputTextBox спрашивать):
MethodInvoker updateText = delegate
{
this .outputTextBox.Text = this .serialPort.ReadExisting();
};
if (this .outputTextBox.InvokeRequired)
this .outputTextBox.Invoke(updateText);
else
updateText();
Never underestimate those behind you...
Re[3]: [ANN] Generic InvocationHelper
Hello, "squiz"
>
> TK>А не проще сразу написать:
> TK>> TK>private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
> TK>{
> TK> if (InvokeRequeried)
> TK> {
> TK> Invoke(delegate { serialPort_DataReceived(sender, e); });
> TK> }
> TK> else
> TK> {
> TK> this .outputTextBox.Text = this .serialPort.ReadExisting();
> TK> }
> TK>}
> TK>
>
> А выделенное разве скомпилируется?
Текст боксы обычно лежат на формах или других контролах у которых Invoke и InvokeRequired уже присутствуют.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: [ANN] Generic InvocationHelper
От:
squiz
Дата: 08.10.06 09:35
Оценка:
Здравствуйте, TK, Вы писали:
>> TK> Invoke(delegate { serialPort_DataReceived(sender, e); });
TK>Текст боксы обычно лежат на формах или других контролах у которых Invoke и InvokeRequired уже присутствуют.
Нет, я о том что такая строка не прокатит (с анонимным методом)
Never underestimate those behind you...
Re[5]: [ANN] Generic InvocationHelper
Здравствуйте, squiz, Вы писали:
>>> TK> Invoke(delegate { serialPort_DataReceived(sender, e); });
TK>>Текст боксы обычно лежат на формах или других контролах у которых Invoke и InvokeRequired уже присутствуют.
S>Нет, я о том что такая строка не прокатит (с анонимным методом)
такая прокатывает:
Invoke(new MethodInvoker(delegate { serialPort_DataReceived(sender, e); }));
... << RSDN@Home 1.2.0 alpha rev. 668>>
Re[6]: [ANN] Generic InvocationHelper
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, squiz, Вы писали:
>>>> TK> Invoke(delegate { serialPort_DataReceived(sender, e); });
TK>>>Текст боксы обычно лежат на формах или других контролах у которых Invoke и InvokeRequired уже присутствуют.
S>>Нет, я о том что такая строка не прокатит (с анонимным методом)
OE>такая прокатывает:
OE>OE>Invoke(new MethodInvoker(delegate { serialPort_DataReceived(sender, e); }));
OE>
Re[3]: Изменение свойтсв контрола в другом потокеАвтор: desco Дата: 28.12.06
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить