\


 Saturday, 24 June 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, 24 June 2006 22:28:13 (Central Europe Standard Time, UTC+01:00)       
Comments [12]  .NET Framework | Programátorské hádanky


Sunday, 25 June 2006 11:09:32 (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, 25 June 2006 11:13:24 (Central Europe Standard Time, UTC+01:00)
Diky za odkaz Petre, to je dobry postup. :)
A nslo by nektere casti kodu trochu zautomatizovat? :)
Sunday, 25 June 2006 15:28:14 (Central Europe Standard Time, UTC+01:00)
C# v2, anonymni metoda pracujici s vnejsimi promennymi?
Tom
Sunday, 25 June 2006 15:29:30 (Central Europe Standard Time, UTC+01:00)
Take by to slo udelat, ale stejne v tom moc elegance nebude :)
Sunday, 25 June 2006 16:37:48 (Central Europe Standard Time, UTC+01:00)
Pomocí metod Thread.GetData/SetData?
Tom
Sunday, 25 June 2006 16:40:11 (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, 25 June 2006 16:50:24 (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, 25 June 2006 16:52:24 (Central Europe Standard Time, UTC+01:00)
:) A jak tuhle tridu metode Start predate? Muzete poslat kod? :)
Sunday, 25 June 2006 16:55:21 (Central Europe Standard Time, UTC+01:00)
Mate pravdu, tak tedy radsi pouziju ParametrizedThreadStart delegata :-P
Tom
Sunday, 25 June 2006 17:01:25 (Central Europe Standard Time, UTC+01:00)
Tak to uz je lepsi reseni, ale nejake ty pihy na krase presto ma :)
Tuesday, 27 June 2006 22:37:52 (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, 30 June 2006 01:33:50 (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.