Страницы

Ярлыки

ДШИ-200 (1) КСВУ-6 (1) ЛЧМ (1) МДР-23 (1) микроконтроллер (1) перенаправление (1) С (1) структуры (1) учебный курс (1) AC/DC (1) ADC (1) ADS1248 (1) Altium (1) Altuim (1) Amolifer (1) ARM (1) assembler (2) Asynchronous (1) at command (3) at#eaddr (1) at#epassw (1) at#esmtp (1) at#euser (1) at#gprs (1) at#selint=2 (1) at#sgact (1) at#tcpatcmdseq (1) ATX (1) AVR (2) bit (1) boost (1) boot (2) bootlloader (1) C (6) C# (7) C++ (1) CMSIS (1) command (1) CP2101 (1) CSD (1) Danfoss (6) DBGMCU (1) debug (1) debug.ini (1) delegate (1) Discovery (1) DMA (1) DRV8805 (1) DWT (1) e-mail (1) email (1) Exel (1) exFAT (1) FC-051 (1) gl868-dual (2) gl868-dual cmux (1) GPIO (2) GSM (1) I2C (1) IAR (1) ID (1) Invoke (1) Keil (3) LabVIEW (1) Linux (1) LMP7721 (1) LoRa (3) mdmread (1) memory (1) MODBUS (1) Operation Amplifer (1) pack (1) printf (2) printf() (1) RCC (1) retargetting (1) RFM95/96/87/98(W) (1) RS232 (4) RS485 (1) RSAPI.DLL (1) RSS (1) RTC (2) send (2) SerialPort (1) Silabs (1) spl (1) standard peripherals library (1) startup (1) stepper (2) STlink (1) STlink/V2 (2) STM32 (10) stm32 stm32f10x (1) STM32DBG.IN (1) STM32F (19) STM32F103 (4) struct (1) Structure (1) system (1) SystemInit (1) Task (1) telit (5) thread (4) TIM (1) Type Cast (1) UART (1) uni-trend (1) USART (6) USB (1) UT61B (1) viewer (1)

пятница, 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();
        }

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


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

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

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