\


 Saturday, June 24, 2006
Programátorská hádanka - jak metodě v delegátu ThreadStart předat argumenty?

Jak asi víte, delegát ThreadStart v .Net Frameworku může ukazovat pouze na metodu, která nemá žádné argumenty a vrací void.

Jak nejlépe metodě v delegátu ThreadStart předat argumenty? A navíc  - dokázali byste, aby metoda spuštěná v delegátu ThreadStart vrátila hodnotu, nebo si teď už opravdu jen vymýšlím po dobrém sobotním bourbonu nějaké rozkošné .Net 3.0 pohádky? ;-) Napadlo mě totiž docela elegantní řešení, tak by mě zajímalo, jestli ho někdo z vás už zná a používá? :-)

 



Saturday, June 24, 2006 10:28:13 PM (Central Europe Standard Time, UTC+01:00)       
Comments [12]  .NET Framework | Programátorské hádanky


Sunday, June 25, 2006 11:09:32 AM (Central Europe Standard Time, UTC+01:00)
Standardni reseni je popsano zde:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingthreads.asp

Predani dat pres svou naplnenou tridu a ziskani dat pomoci callback funkce.
Petr Felzmann
Sunday, June 25, 2006 11:13:24 AM (Central Europe Standard Time, UTC+01:00)
Diky za odkaz Petre, to je dobry postup. :)
A nslo by nektere casti kodu trochu zautomatizovat? :)
Sunday, June 25, 2006 3:28:14 PM (Central Europe Standard Time, UTC+01:00)
C# v2, anonymni metoda pracujici s vnejsimi promennymi?
Tom
Sunday, June 25, 2006 3:29:30 PM (Central Europe Standard Time, UTC+01:00)
Take by to slo udelat, ale stejne v tom moc elegance nebude :)
Sunday, June 25, 2006 4:37:48 PM (Central Europe Standard Time, UTC+01:00)
Pomocí metod Thread.GetData/SetData?
Tom
Sunday, June 25, 2006 4:40:11 PM (Central Europe Standard Time, UTC+01:00)
Data se dají ukládat ledaskam, trebai do Thread Strorage, :) ale v tom zadny vetsi problem k elegantnimu vyreseni ani nevidim...
Sunday, June 25, 2006 4:50:24 PM (Central Europe Standard Time, UTC+01:00)
Genericka trida s typovymi argumenty TArg, TRet urcijicimi typ verejnych vlastnosti, predana metode Start?

Uz mi dochazi napady ;-)
Tom
Sunday, June 25, 2006 4:52:24 PM (Central Europe Standard Time, UTC+01:00)
:) A jak tuhle tridu metode Start predate? Muzete poslat kod? :)
Sunday, June 25, 2006 4:55:21 PM (Central Europe Standard Time, UTC+01:00)
Mate pravdu, tak tedy radsi pouziju ParametrizedThreadStart delegata :-P
Tom
Sunday, June 25, 2006 5:01:25 PM (Central Europe Standard Time, UTC+01:00)
Tak to uz je lepsi reseni, ale nejake ty pihy na krase presto ma :)
Tuesday, June 27, 2006 10:37:52 PM (Central Europe Standard Time, UTC+01:00)
pres delegata a dynamic Invoke

utrzek kodu:
Public Class ThreadPoolWorkItem
Public m_bStoreOutput As Boolean = False
Public m_sName As String = ""
Public m_pMethod As [Delegate] = Nothing
Public m_pInput As Object() = Nothing
Public m_oOutput As Object = Nothing
Public m_oException As Exception = Nothing

Public Sub New()
End Sub

Public Sub New(ByVal sName As String, ByVal pMethod As [Delegate], ByVal pInput As Object(), ByVal bStoreOutput As Boolean)
m_sName = sName
m_pMethod = pMethod
m_pInput = pInput
m_bStoreOutput = bStoreOutput
End Sub

End Class

Dim oWorkItem As ThreadPoolWorkItem = CType(obj, ThreadPoolWorkItem)

oWorkItem.m_oOutput = oWorkItem.m_pMethod.DynamicInvoke(oWorkItem.m_pInput)
Friday, June 30, 2006 1:33:50 AM (Central Europe Standard Time, UTC+01:00)
aa, nepozornost. A pritom je to v nazvu spotu...

V nekterych projektech pouzivam jine reseni, kdy spoustim thready, ve kterych vyse zminenym zpusobem predavam parametry a odebiram vysledek.
Cely zdrojak (upraveny XYThread projekt) mohu poslat..

Rene, jsem zvedavy na tve reseni..
Comments are closed.