ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[help] Потоки и Windows Forms controls
  #1  
Старый 13.04.2010, 15:22
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме:
4275992

Репутация: 1188


Question [help] Потоки и Windows Forms controls

Всем привет.
Не могу въехать в thread-safe and unsafe ways to call a Windows Forms control.
Нужно мне тугому на простом примере показать как это сделать. Для примера возьмем самый примитив. главное понять а дальше уже привинтить что нужно проблем не составит.

Постановка задачи.
Есть форма, на которой кнопка и тексбокс. по нажатию кнопки нужно заполнить текстбокс текстом. раз дело о потоках - соответственно метод заполнения будет в новом потоке) Дальше чуть кода.

PHP код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 
WindowsFormsApplication1
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void button1_Click(object senderEventArgs e)
        {
            
textBox1.Text = ("Hello, Antichat!");
        }
    }

либо же вызвать метод

PHP код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 
WindowsFormsApplication1
{
    public 
partial class Form1 Form
    
{
        public 
Form1()
        {
            
InitializeComponent();
        }

        private 
void button1_Click(object senderEventArgs e)
        {
            
hello();
        }

        private 
void hello()
        {
            
textBox1.Text = ("Hello, Antichat!");
        }
    }

все это одно и тоже... смысл не в этом.
мне нужно вызвать метод hello отдельным потоком.
но с потоками я почти не знаком, и теперь начинается все самое веселое.
запускаю поток
PHP код:
private void button1_Click(object senderEventArgs e)
        {
            
Thread privet = new Thread(hello);
            
privet.Start();
        }
private 
void hello()
        {
            
textBox1.Text = ("Hello, Antichat!");
        } 
и что имеем...
ОШИБКА Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "textBox1" не из того потока, в котором он был создан.

ну суть ошибки как бы ясна. исправить ее только не получается у меня)
Может кто распишет этот примитив для меня, чтобы разобраться можно было)
задача та же - просто заполнить текстбокс с другоо потока.
 
Ответить с цитированием

  #2  
Старый 13.04.2010, 15:29
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме:
4275992

Репутация: 1188


По умолчанию

Здесь присутствуют: 10 (пользователей - 1 , гостей - 9)
0_o
 
Ответить с цитированием

  #3  
Старый 13.04.2010, 15:32
Berman
Участник форума
Регистрация: 20.02.2010
Сообщений: 121
Провел на форуме:
496930

Репутация: 60
Отправить сообщение для Berman с помощью ICQ
По умолчанию

синхронизировать нужно
покрайнеё мере в делфи так
 
Ответить с цитированием

  #4  
Старый 13.04.2010, 15:45
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

if (InvokeRequed)
{
BeginInvoke(new MethodInvoker(() => textBox1.Text = "abc")));
}


P.S. тыц
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #5  
Старый 13.04.2010, 16:10
NetSter
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме:
4275992

Репутация: 1188


По умолчанию

thx.
Close pls.
ЗЫ\ не видел ту статью, честно
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
История Windows (с картинками) GrinGoO Статьи 19 17.04.2010 13:01
Преодолевая ограничения Windows: физическая память jawbreaker Чужие Статьи 1 16.02.2009 02:12
Windows Vista Robin_Hood Мировые новости 18 09.03.2007 14:00



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ