Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2010, 20:34   #1
B@ND!T
 
Регистрация: 22.11.2008
Сообщений: 4
По умолчанию Передача параметров обьектам из разных потоков(работа с Thread)

Здраствуйте! Помогите пожалуйста решить такую проблемку!
Необходимо изменить значение параметров кнопки Button(Button.Location = new System.Drawing.Point(X, Y) через обьект Thread. Для этого я пытался привязать процедуру mm() к потоку, код следущий:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void mm()
{
Цитата:
button1.Location=new System.Drawing.Point(15, 15);
}
private void button1_Click(object sender, EventArgs e)
{
Thread tre = new Thread(mm);
tre.Start();
}
}
}
Получаем следущую ошыбку:

Не может изменить параметры обьекта созданного в другом потоке.
Строго не судите, я в сишке новичок!
Сдесь нужно применить делегаты, для безопасного вызова метода mm(), только вот как????

Последний раз редактировалось B@ND!T; 27.01.2010 в 20:42.
B@ND!T вне форума Ответить с цитированием
Старый 27.01.2010, 23:09   #2
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Так нельзя наверно!"button1" не из того потока, в котором он был создан
Cpluser вне форума Ответить с цитированием
Старый 27.01.2010, 23:37   #3
B@ND!T
 
Регистрация: 22.11.2008
Сообщений: 4
По умолчанию

Вопрос исчерпан! Все решено таким кодом с помощью делегата кнопки:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public delegate void MyStrDelegate(int X);
        public void changeposition(int X)
        {
            if (this.button2.InvokeRequired)
            {
                Delegate dlg = new MyStrDelegate(changeposition);
                BeginInvoke(dlg, X);
            }
            else
            {
                button2.Location = new Point(X, button2.Location.Y);
            }
        }

        public void doWoork(object obj)
        {
            int inx = (Int32)obj;
            Thread.Sleep(300);
            this.changeposition(inx);
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            ParameterizedThreadStart job = new ParameterizedThreadStart(doWoork);
            Thread tre = new Thread(job);
            tre.Start(10);
        }
    }
}

Последний раз редактировалось Sazary; 31.01.2010 в 23:29.
B@ND!T вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача параметров в createprocess Consol Win Api 11 12.05.2010 13:49
Передача параметров aesoem Общие вопросы Delphi 8 15.07.2008 21:51
Передача параметров Gudzon Общие вопросы Delphi 12 08.02.2007 08:19