Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться с потоками 
:(
    Опции темы
compaq
Дата 24.9.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



В обшем проблема в следуюшем.
Есть клавный поток формы и есть вспомогательные потоки. Задача после того как во вспомогательных потоках завершатся вычисления оотбразить их результат в listBox главной формы.
В обшем как я понял из форума для того что я хочу сделать надо использовать Invoke но у меня что то не получается. Не моглибы вы подсказать что я не так делаю.
Код

        private void button1_Click(object sender, EventArgs e)
        {
            Potok t = new Potok();
            t.a = Convert.ToInt16(textBox1.Text);
            t.b = Convert.ToInt16(textBox2.Text);

            new Thread(t.Proc1).Start();

        }
    }
    public class Potok
    {
        Random Rand = new Random();
        public int a, b, c, d, f, g;

        public void Proc1()
        {
            double Result = a + (b - a) * Rand.NextDouble();
            listBox1.Invoke(new ThreadStart(ADD(Convert.ToString(Result))));
            //listBox1.Items.Add(Convert.ToString(Result));
        }
        public void ADD(string Result)
        {
            listBox1.Items.Add(Result);
        }
}


PM MAIL   Вверх
0000
Дата 24.9.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: нет
Всего: 5



в общих вопроса по .NET похожая тема висит..
PM MAIL ICQ   Вверх
compaq
Дата 24.9.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Эта http://forum.vingrad.ru/forum/topic-173818...поточность.html
В обшем я попытался повторить что там написано и теперь у меня компилятор выдаёт ошибку что ммммм не находится в контексте

Что то я с этими потоками совсем запутался  smile 

Код

public partial class Form1 : Form
    {
        public delegate void AppendTextDelegate(string text);

        private void privateAppendText(string text)
        {
            this.listBox1.Items.Add(text);
        }

        public void publicAppendText(string text)
        {
            this.textBox1.BeginInvoke(new AppendTextDelegate(this.privateAppendText), new object[] { text });
        }

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Potok t = new Potok();
            t.a = Convert.ToInt16(textBox1.Text);
            t.b = Convert.ToInt16(textBox2.Text);
            //t.c = Convert.ToInt16(textBox3.Text);
            //t.d = Convert.ToInt16(textBox4.Text);
            //t.f = Convert.ToInt16(textBox5.Text);
            //t.g = Convert.ToInt16(textBox6.Text);
            new Thread(t.Proc1).Start();
            //new Thread(t.Proc2).Start();
            //new Thread(t.Proc3).Start();
        }
    }
    public class Potok
    {
        Random Rand = new Random();
        public int a, b, c, d, f, g;

        public void Proc1()
        {
            double Result = a + (b - a) * Rand.NextDouble();
            publicAppendText(Convert.ToString(Result));
        }
}
}

 
PM MAIL   Вверх
0000
Дата 24.9.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: нет
Всего: 5



во-первых, ты begininvoke делаешь у текстбокса, а обновляешь listbox...во-вторых прямо из класса Potok не видно метода формы..можешь использовать так:

Код

using System.Threading;
    public delegate void AppendTextDelegate(string text);

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void privateAppendText(string text)
        {
            this.textBox1.Text = text;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Potok t = new Potok();
            Random r = new Random();
            t.a = r.Next(10);
            t.a = r.Next(10);
            t.OnPerform += new AppendTextDelegate(t_OnPerform);
            Thread th = new Thread(t.Proc1);
            th.IsBackground = false;
            th.Start();
        }

        void t_OnPerform(string text)
        {
            this.textBox1.BeginInvoke(new AppendTextDelegate(this.privateAppendText), new object[] { text });
        }
    }
    public class Potok
    {
        public event AppendTextDelegate OnPerform;
        Random Rand = new Random();
        public int a, b;

        public void Proc1()
        {
            for (int j = 0; j < 10; j++)
            {
                double Result = a + (b - a) * Rand.NextDouble();
                if (OnPerform != null)
                    OnPerform(Result.ToString());

                Thread.Sleep(1000);
            }
        }
    }

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.