Страницы

пятница, 13 марта 2015 г.

C# Thread

Из кода запустить событие, например, нажатия кнопки

button1_Click(null, null);
или

button1.PerformClick();

при этом должен существовать обработчик события Clik для button1

private void button1_Click(object sender, EventArgs e)
{
}

Вызов событие нажатия кнопки в одной форме, нажатием в другой

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("!!!");
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            Form2 f = new Form2(button1);
            f.Show();
        }
    }
}
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        Button b;
        public Form2(Button b)
        {
            this.b = b;
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            b.PerformClick();
        }
    }
}


Простейший пример создания потока:

       //Объявляем класс Thread, загоняем экземпляр в переменную
        public Thread newThread;
        private void Form1_Load(object sender, EventArgs e)
        {
            //Создаём новый поток, им будет функция F2
            newThread = new Thread(F2);
            //Запускаем поток на выполнение
            newThread.Start();

        }

        private void F2() {
            int i = 0;
            //Запускаем цикл
            while(i == 0){  
                //даём доступ к форме
                this.Invoke((MethodInvoker)delegate()            
                {   
                    //присваиваем значение текстовому полю
                    textBox1.Text += "1";
                    //делаем паузу на 50 мсек
                    Thread.Sleep(50);
                });            
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Останавливаем/удаляем поток
            newThread.Abort();
        }

данный фрагмент даёт доступ к форме из постороннего потока

        private void button1_Click(object sender, EventArgs e)
        {
            //Останавливаем/удаляем поток
            newThread.Abort();
        }

Если этого не сделать, при попытке поменять что то в форме, добавить, будет выдавать ошибку


Комментариев нет:

Отправить комментарий

ваше мнение...