This is my first class:
namespace WindowsFormsApplication2 
{
    public partial class Form1 : Form    
    {
        public Form1()
        {
            InitializeComponent();
            /*_enemy = new Class1(this);
            int y = Class1.MyMethod(0);
            textBox1.Text = Convert.ToString (y);*/
        }
        private Class1 _enemy;
        private void button1_Click(object sender, EventArgs e)
        {
            _enemy = new Class1(this);
            int y = Class1.MyMethod();
            textBox1.Text = Convert.ToString(y);
        }
    }
}
and this is my second class:
namespace WindowsFormsApplication2
{
    public class Class1    
    {    
        public Class1( Form1 form )
        {
            _form1 = form;
        }
        public static int MyMethod()
        {
            int i = 0;
            for (int j = 1; j <= 20; j++)
            {
                i = j;
                //Thread.Sleep(100);
            }
            return i;
        }
    }
    // DON'T initialize this with new Form1();
    private Form1 _form1;
}
The program is running correctly and I am getting only 20 as output in the TextBox. What I want is the output each time the loop runs.
Like 1,2,3,.........20 and stop.

Like a counter maybe. I also tried using Timer but couldn't do that.
EDIT:
@Mong Zhu I have cross checked the code, still getting the exception.
For your reference here are the complete codes:
Form1.cpp
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        Class1 MyCounterClass;
        private void Form1_Load(object sender, EventArgs e)
        {
            MyCounterClass = new Class1();
            // register the event. The method on the right hand side 
            // will be called when the event is fired
            MyCounterClass.CountEvent += MyCounterClass_CountEvent;
        }
        private void MyCounterClass_CountEvent(int c)
        {
            if (textBox1.InvokeRequired)
            {
                textBox1.BeginInvoke(new Action(() => textBox1.Text = c.ToString()));
            }
            else
            {
                textBox1.Text = c.ToString();
            }
        }
        public Form1()
        {
            InitializeComponent();
        }
        private Class1 _enemy;
        private void button1_Click(object sender, EventArgs e)
        {
            MyCounterClass.MyCountMethod(300, 0, 10);
        }
    }
}
and class1.cpp
namespace WindowsFormsApplication2
{
    public class Class1
    {
        public delegate void Counter(int c); // this delegate allows you to transmit an integer
public event Counter CountEvent;
public Class1()
    {
    }
         public void MyCountMethod(int interval_msec, int start, int end)
         {
             System.Threading.Thread t = new System.Threading.Thread(() =>
             {
                 for (int i = start; i <= end; i++)
                 {
                     // Check whether some other class has registered to the event
                     if (CountEvent != null)
                     {
                         // fire the event to transmit the counting data
                         CountEvent(i);
                         System.Threading.Thread.Sleep(interval_msec);
                     }
                 }
             });
             // start the thread
             t.Start();
         }
    // DON'T initialize this with new Form1();
        private Form1 _form1;
    }
}
 
     
     
     
    