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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2011, 14:33   #11
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Invoke надо вызывать у того же объекта у которого спрашиваешь InvokeRequired. Т.е.
Код:
 if (listBox1.InvokeRequired)
           {
               AddTextToTextBox d = new AddTextToTextBox(AddToListBox);
               listBox1.BeginInvoke(d, new object[] { message });
           }
           else
           {
               listBox1.Text += message + "\r\n";
           }
Попробуй и Invoke и BeginInvoke

Последний раз редактировалось Hollander; 07.04.2011 в 14:35.
Hollander вне форума Ответить с цитированием
Старый 07.04.2011, 14:45   #12
delias
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 27
По умолчанию

действительно, listBox1.BeginInvoke(d, new object[] { message }); сработал!
Спасибо большое, только теперь другая проблема, как и положено, срабатывает
Код:
 public void AddToListBox(string msg)
       {
           MessageBox.Show("sdc");
           //listBox1.Text += msg + "!!!!!!!!!!!!!!!!\r\n";
           listBox1.Text = "1111111111111111";
       }
MessageBox есть, а вот в listBox1 изменений так и нет, текст не меняется. Т.е. метод срабатывает, но действия над листбоксом до сих пор почему-то не производятся
delias вне форума Ответить с цитированием
Старый 07.04.2011, 14:55   #13
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Об этом я писал тебе в начале обсуждения. Чтобы добавить элемент в список надо:
Код:
listBox1.Items.Add(msg);
Hollander вне форума Ответить с цитированием
Старый 07.04.2011, 15:08   #14
delias
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 27
По умолчанию

да, ты прав. спасибо огромное.
а можешь на пальцах примерно объяснить, почему текст поменять нельзя, а айтем можно.
delias вне форума Ответить с цитированием
Старый 07.04.2011, 15:21   #15
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Потому что ListBox отображает элементы из списка Items. Свойство Text не используется для отображения. Единственное чего ты можешь добиться выставив это свойство - это выделение такого текста в списке, если оно есть. Если забирать это значение, то оно равно тексту выбранного элемента.

Последний раз редактировалось Hollander; 07.04.2011 в 15:24.
Hollander вне форума Ответить с цитированием
Старый 07.04.2011, 15:45   #16
delias
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 27
По умолчанию

Ясно, спасибо за помощь!
delias вне форума Ответить с цитированием
Старый 06.06.2013, 22:24   #17
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию У меня похожая ситуация.

Сообщение удалено
Программист это не профессия, программист - это образ жизни.

Последний раз редактировалось Prizrak86; 06.06.2013 в 22:36. Причина: Удалите это сообщение, в процессе набора случайно отправилось. прошу прощения.
Prizrak86 вне форума Ответить с цитированием
Старый 06.06.2013, 22:33   #18
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию У меня похожая ситуация.

у меня метод вызывается правильно
Код:
        private void Render()
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new ThreadStart(Render));
                
            }
            else
            {
                _bg.Render();
            }
        }
этот метод вызывается у меня на 2-ой форме, если отдельно ее вызывать то все нормально. (она лежит в отдельном проекте и подключена к другому проекту)

после продолжительного гугла я понял что выполнение моего метода становиться в очередь и там залипает, еще я понял что это связано с какими то странными потоками при создании формы (вторую форму я запускаю из конструктора первой создавая для второй формы отдельный поток)

Конструктор первой
Код:
public ARIZ()
        {
            
           _thr =new Thread(Start);
           _thr.Name = "Вызов из конструктора АРИЗ";
           _thr.IsBackground = true;
           _thr.Start();
           Thread.Sleep(5000);
            InitializeComponent();
            
        }

содержимое потока вызова формы
Код:
private void Start()
        {
            
                lf = new LogoForm();
                lf.Show();

                lf._thr.Join();
          
        }
было и такое содержимое
Код:
private void Start()
        {
            
                lf = new LogoForm();
                lf.Show();

                while (true)
                {
                    Thread.Sleep(0);
                }
          
        }
метод который я пытаюсь вызвать в нужном потоке прорисовывает содержимое буфера на форму. помогите разобраться что не так????
Программист это не профессия, программист - это образ жизни.
Prizrak86 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Unable to invoke Code.... sisofcase Общие вопросы Delphi 16 14.07.2011 20:02
Доступ из другого класса KipZ Windows Forms 1 06.02.2011 15:22
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
Доступ к функциям и структурам из потока MAIN_ELF Общие вопросы C/C++ 2 04.10.2010 15:08
директивы в MASM - INVOKE, PROTO, LOCAL fermat_c Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 05.04.2008 18:25