Solved

ParameterizedThreadStart with parameter

Posted on 2009-05-07
14
11,063 Views
Last Modified: 2012-05-06
How do I let the ParameterizedThreadStart take a List<byte> as a parameter ?
List<byte> pmList = new List<byte>();
 
ParameterizedThreadStart pts = new ParameterizedThreadStart(CheckPunches);
                        Thread t = new Thread(pts);
                        t.Start(pmList);
 
private void CheckPunches(List<byte> bBuffer)
{
 
}

Open in new window

0
Comment
Question by:u2envy1
  • 6
  • 5
  • 3
14 Comments
 
LVL 16

Accepted Solution

by:
CuteBug earned 500 total points
ID: 24324822
You have to declare CheckPunches in the following way
            List<byte> pmList = new List<byte>();
 
            ParameterizedThreadStart pts = new ParameterizedThreadStart(CheckPunches);
            Thread t = new Thread(pts);
            t.Start(pmList);
 
 
        }
 
        private void CheckPunches(object data)
        {
            List<byte> pmList = (List<byte>)data;
        }

Open in new window

0
 

Author Comment

by:u2envy1
ID: 24324919
Perfecto !!
How do I call the CheckPunches in a ThreadPool.... ?
0
 
LVL 16

Expert Comment

by:CuteBug
ID: 24324955
WaitCallback workItem = new WaitCallback(CheckPunches);
ThreadPool.QueueUserWorkItem(CheckPunches,  pmList);
0
Ransomware: The New Cyber Threat & How to Stop It

This infographic explains ransomware, type of malware that blocks access to your files or your systems and holds them hostage until a ransom is paid. It also examines the different types of ransomware and explains what you can do to thwart this sinister online threat.  

 

Author Comment

by:u2envy1
ID: 24325093
Thanks....
Can I add this in a loop or should I keep the WaitCallback outside the loop ?
0
 
LVL 16

Expert Comment

by:CuteBug
ID: 24325208
Which loop are you referring to?
0
 

Author Comment

by:u2envy1
ID: 24325261
Sorry...... My loop looks like this.

Process Buffer()
{
do
{
 
WaitCallback workItem = new WaitCallback(CheckPunches);
ThreadPool.QueueUserWorkItem(CheckPunches,  pmList);
pmList = Connection.ReadData();
 
}
While(pmList.Count() != 0);
}

Open in new window

0
 
LVL 9

Expert Comment

by:tculler
ID: 24325338
You can actually just omit the WaitCallback delegate decleration entirely; there's no reason for it, really.

Also, you're going to get a compiler error on line 11 for 2 reasons: first, "while" is capitalized. Second, the List object's Count method is actually a property, so you'll need to remove those parentheses.

Using the ThreadPool and individual threads are completely different things, so if you'd like me to explain what's going on here, I can :)
Nate
0
 

Author Comment

by:u2envy1
ID: 24325429
Sorry about the two mistakes. Was just typing over my head.
So you saying that every time I call the CheckPunches it will be executed in a new thread with out the WaitCallback delegate ?
0
 
LVL 16

Expert Comment

by:CuteBug
ID: 24325556
WaitCallback delegate is required.

@u2envy1:
By the way, It should be ThreadPool.QueueUserWorkItem(workItem, pmList);

And yes it should be within the loop. Therefore each time the pmList gets new data, a new instance of CheckPunches is added to the ThreadPool for processing.
0
 

Author Closing Comment

by:u2envy1
ID: 31578959
Thx..... all your help is much appreciated
0
 
LVL 9

Expert Comment

by:tculler
ID: 24326077
Hate to go back and forth here, but... The WaitCallback delegate is NOT required. The compiler will automatically do this for you--there's no reason to create it yourself. The following will work just fine.
ThreadPool.QueueUserWorkItem(YourMethod, pmList);
// "YourMethod" should match the name of the handling method. Be sure
// to omit the parentheses "()"
 
void YourMethod(Object myData) 
{
     // Processing, etc etc
}

Open in new window

0
 
LVL 16

Expert Comment

by:CuteBug
ID: 24326183
tculler, you are right.
my mistake.
0
 
LVL 9

Expert Comment

by:tculler
ID: 24326251
No problem, honest mistake ;)
0
 

Author Comment

by:u2envy1
ID: 24326348
Thx guys......
tculler: Sorry I neva award you with some points.
0

Featured Post

ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Article by: Ivo
C# And Nullable Types Since 2.0 C# has Nullable(T) Generic Structure. The idea behind is to allow value type objects to have null values just like reference types have. This concerns scenarios where not all data sources have values (like a databa…
Introduction Hi all and welcome to my first article on Experts Exchange. A while ago, someone asked me if i could do some tutorials on object oriented programming. I decided to do them on C#. Now you may ask me, why's that? Well, one of the re…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question