ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
[help] Потоки и Windows Forms controls |

13.04.2010, 15:22
|
|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
[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 sender, EventArgs 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 sender, EventArgs e)
{
hello();
}
private void hello()
{
textBox1.Text = ("Hello, Antichat!");
}
}
}
все это одно и тоже... смысл не в этом.
мне нужно вызвать метод hello отдельным потоком.
но с потоками я почти не знаком, и теперь начинается все самое веселое.
запускаю поток
PHP код:
private void button1_Click(object sender, EventArgs e)
{
Thread privet = new Thread(hello);
privet.Start();
}
private void hello()
{
textBox1.Text = ("Hello, Antichat!");
}
и что имеем...
ОШИБКА Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "textBox1" не из того потока, в котором он был создан.
ну суть ошибки как бы ясна. исправить ее только не получается у меня)
Может кто распишет этот примитив для меня, чтобы разобраться можно было)
задача та же - просто заполнить текстбокс с другоо потока.
|
|
|

13.04.2010, 15:29
|
|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
Здесь присутствуют: 10 (пользователей - 1 , гостей - 9)
0_o
|
|
|

13.04.2010, 15:32
|
|
Участник форума
Регистрация: 20.02.2010
Сообщений: 121
Провел на форуме: 496930
Репутация:
60
|
|
синхронизировать нужно
покрайнеё мере в делфи так
|
|
|

13.04.2010, 15:45
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
if (InvokeRequed)
{
BeginInvoke(new MethodInvoker(() => textBox1.Text = "abc")));
}
P.S. тыц
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|

13.04.2010, 16:10
|
|
студент
Регистрация: 30.07.2007
Сообщений: 800
Провел на форуме: 4275992
Репутация:
1188
|
|
thx.
Close pls.
ЗЫ\ не видел ту статью, честно 
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|