To reterive data from a Thread, you need a delegate callback methdo.
step1 : Decalre the delegate for the callback method
This delegare define the signature of the funtion which will be called by the Thread.
Step 2: Amend you call to accept delegate method while creating instance of the class
Step 3: Amend the ThreadProc (procedure that will be running on the Thread) to make a call to callback method
Step 4: Create a static function which you want to be called by the Thread. Note this should match the signature of the delegate
Step 5: Pass the address of the method as a delegate instance
Compile and Run the code.
here is the complete code
step1 : Decalre the delegate for the callback method
public delegate void CallbackMethod(int anynum);
This delegare define the signature of the funtion which will be called by the Thread.
Step 2: Amend you call to accept delegate method while creating instance of the class
private CallbackMethod _callback;
public TypeSafe(int num, string msg, CallbackMethod callback)
{
_num = num;
_msg = msg;
_callback = callback;
}
Step 3: Amend the ThreadProc (procedure that will be running on the Thread) to make a call to callback method
public void ThreadProc()
{
Console.WriteLine(_msg, _num);
if (_callback != null)
{
_callback(_num + 100);
}
}
Step 4: Create a static function which you want to be called by the Thread. Note this should match the signature of the delegate
public static void ResultCallback(int n)
{
Console.WriteLine("result from callback is {0}", n);
}
Step 5: Pass the address of the method as a delegate instance
TypeSafe ts = new TypeSafe(100, "This is message from a TypeSafe Thread with num as {0}",new CallbackMethod(ResultCallback));
Compile and Run the code.
here is the complete code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ThreadTypeSafe
{
class Program
{
static void Main(string[] args)
{
TypeSafe ts = new TypeSafe(100, "This is message from a TypeSafe Thread with num as {0}",new CallbackMethod(ResultCallback));
Thread t1 = new Thread(ts.ThreadProc);
t1.Start();
t1.Join();
Console.WriteLine("Main thread exiting");
Console.ReadKey();
}
public static void ResultCallback(int n)
{
Console.WriteLine("result from callback is {0}", n);
}
}
public delegate void CallbackMethod(int anynum);
public class TypeSafe
{
private int _num;
private string _msg;
private CallbackMethod _callback;
public TypeSafe(int num, string msg, CallbackMethod callback)
{
_num = num;
_msg = msg;
_callback = callback;
}
public void ThreadProc()
{
Console.WriteLine(_msg, _num);
if (_callback != null)
{
_callback(_num + 100);
}
}
}
}
Comments