<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Stefan Sedich's Blog : .NET 1.1</title><link>http://weblogs.asp.net/stefansedich/archive/tags/.NET+1.1/default.aspx</link><description>Tags: .NET 1.1</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>ParameterizedThread in .NET 1.1</title><link>http://weblogs.asp.net/stefansedich/archive/2007/11/15/parameterizedthread-in-net-1-1.aspx</link><pubDate>Thu, 15 Nov 2007 03:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:5203635</guid><dc:creator>stefan.sedich</dc:creator><author>stefan.sedich</author><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/stefansedich/rsscomments.aspx?PostID=5203635</wfw:commentRss><comments>http://weblogs.asp.net/stefansedich/archive/2007/11/15/parameterizedthread-in-net-1-1.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Had a problem where I wanted to run a function in a thread but it expected multiple params. So I went around making the ParameterizedThread Class which helped me to execute this method.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;The Class:&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;Public Class ParameterizedThread&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private m_Method As [Delegate]&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Sub New(ByVal inMethod As [Delegate])&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Method = inMethod&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Sub Start(ByVal ParamArray inArgs As Object())&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim threadClass As New InternalThreadClass(m_Method, inArgs)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim thread As New Threading.Thread(AddressOf threadClass.RunThread)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; thread.Start()&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Class InternalThreadClass&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private m_Args() As Object&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private m_Method As [Delegate]&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Sub New(ByVal inMethod As [Delegate], ByVal ParamArray inArgs As Object())&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Method = inMethod&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Args = inArgs&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Public Sub RunThread()&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Try&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_Method.DynamicInvoke(m_Args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Catch ex As Exception&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Throw ex&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Try&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Class&lt;/P&gt;
&lt;P mce_keep="true"&gt;End Class&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Usage Example:&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;To use this class we need to create a delegate for our method. Create a new ParameterizedThread class instance and call the start method with the params the function expects.&lt;BR&gt;&lt;BR&gt;Private Delegate Sub DoNothingDelegate(ByVal inName as String, ByVal inAge as String)&lt;BR&gt;Private Sub DoNothing(ByVal inName as String, ByVal inAge as String)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ' Does Nothing :)&lt;BR&gt;End Sub&lt;BR&gt;&lt;BR&gt;This is our function we would like to call and pass in the params, to do so use the following:&lt;BR&gt;&lt;BR&gt;Dim deleg as DoNothingDelegate = AddressOf DoNothing&lt;BR&gt;Dim thr as new ParameterizedThread(deleg)&lt;BR&gt;' Call start passing in our params&lt;BR&gt;thr.Start("bob", 22)&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Issues:&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;There is not much checking to make sure the params match the types expected in the method. It seems to work fine for my purposes but it could be totally wrong.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Once again thanks for reading and any feedback on whether or not this will work as expected in all cases would be appreciated.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;BR&gt;Cheers&lt;/P&gt;
&lt;P mce_keep="true"&gt;Stefan&lt;BR&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Update 200711151238:&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;I changed the class&amp;nbsp;so that the&amp;nbsp;args were placed in an internal class which was then called in the new thread. I thought maybe without this the state could be lost.&amp;nbsp;No sure but..&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5203635" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/stefansedich/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/stefansedich/archive/tags/.NET+1.1/default.aspx">.NET 1.1</category><category domain="http://weblogs.asp.net/stefansedich/archive/tags/ASP/default.aspx">ASP</category><category domain="http://weblogs.asp.net/stefansedich/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/stefansedich/archive/tags/MICROSOFT/default.aspx">MICROSOFT</category><category domain="http://weblogs.asp.net/stefansedich/archive/tags/PARAMETRES/default.aspx">PARAMETRES</category><category domain="http://weblogs.asp.net/stefansedich/archive/tags/THREADS/default.aspx">THREADS</category></item></channel></rss>