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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение контрола из потока 
V
    Опции темы
Verus
Дата 25.10.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как сделать подскажите плиз или покажите где прочитать smile
PM MAIL   Вверх
Экскалупатор
Дата 25.10.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



PM MAIL ICQ   Вверх
Verus
Дата 26.10.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Там написано все в пределах одного класса, т.е. есть доступ для приватных полей, а у меня поток это отделный класс, как достучаться до контролов на форме из него?
PM MAIL   Вверх
Экскалупатор
Дата 26.10.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



Verus, все поддается одним и тем же правилам. доступ получается точно так же как и в одном потоке но в нескольких классах. т.е. класс из которого нужно изменять форму, должен знать о существовании формы, и иметь доступ к тому что нужно изменять.
PM MAIL ICQ   Вверх
Verus
Дата 26.10.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А как лучше всего ему(классу) сообщить о форме? Наследоваться от нее или передать this в класс или есть еще способы?
PM MAIL   Вверх
Экскалупатор
Дата 26.10.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



читаем в форуме для новичков тему Как обратиться к объекту другой формы.


p.s. очевидно что форма это такой же класс как и всякий другой, поэтому обратиться из одного класса к контролу класса формы это тоже самое что обратиться из одной формы к контролу другой.

p.p.s. а что значит наследовать форму? это из каких соображений такое можно делать(я про теорию)? производный класс будет являться формой? будет ее как то расширять? наверняка нет, а значит наследовать ее смысла нету. 

Это сообщение отредактировал(а) Экскалупатор - 26.10.2009, 14:30
PM MAIL ICQ   Вверх
Verus
Дата 26.10.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо большое. Решил просто передавать this формы в класс smile
PM MAIL   Вверх
IGV
Дата 29.10.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Verus @  26.10.2009,  15:54 Найти цитируемый пост)
Спасибо большое. Решил просто передавать this формы в класс  

не лучшее решение
Лучше пропишите в методе, который вызываете из потока.
А в UpdateData() - код который нужно выполнить
Код

               if (InvokeRequired)
                {
                    Invoke(new MethodInvoker(delegate { UpdateData(); }));
                }
                else
                {
                    UpdateData();
                }


PM MAIL ICQ   Вверх
tht
  Дата 4.10.2010, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не знаю... все перечитал что было по ссылкам... так нифига и не работает. а надо тоже самое что и автору вопроса.
даже эти инвоки делал, только не понял нафига они нужны если они не позволяют все равно передать данные из потока одного класса в контрол формы другого класса??? что this'ы что не this'ы толку нет.

это класс потоков:
Код

namespace webResponse {
    class ClassMyThread {
        private StreamReader SR;
        //char[] charBuff = new char[100];
        //byte[] byteBuff = new byte[100];
        //string stringBuff;
        Thread ThreadResponse;
        Thread ThreadMonitorRun;
        myForm myFormLink = new myForm();

        public ClassMyThread(StreamReader streamReader) {
            SR = streamReader;
        }

        public void RunThreadResponseProc(StreamReader sr) {
            ThreadResponse = new Thread(new ThreadStart(ThreadPesponse));
            ThreadResponse.Name = "ThreadResponse";
            ThreadResponse.Start();
        }

        public void RunThreadResponseProcMonitor() {
            ThreadMonitorRun = new Thread(new ThreadStart(ThreadMonitor));
            ThreadMonitorRun.Name = "ThreadMonitor";
            ThreadMonitorRun.Start();
        }

        public void ThreadPesponse() {
            MessageBox.Show("Thread proc Pesponse runned");
            while(SR.Peek() > -1) {
                //SR.ReadBlock(charBuff,0,100);
                //myFormLink.TextHTML.Text += SR.ReadLine();
                if(this.myFormLink.TextHTML.InvokeRequired) {
                    //this.myFormLink.Te
                    this.myFormLink.TextHTML.Invoke(new MethodInvoker(delegate { SR.ReadLine(); }));
                } else {
                    this.myFormLink.TextHTML.Text += SR.ReadLine();
                }
            }
        }

        public void ThreadMonitor() {
            MessageBox.Show("Thread Monitor started");
            while(ThreadResponse.IsAlive) {
                Thread.Sleep(50);
            }
            if(ThreadResponse.IsAlive == false) {
                MessageBox.Show("Thread Response ended");
                SR.Close();
            }
        }
    }
}


а вот класс формы в котором вызываются или создаются потоки:
Код

public partial class myForm:Form {
        public myForm() { InitializeComponent(); }
        HttpWebRequest hwr;
        HttpWebResponse hwrsp;
        WebHeaderCollection whc;

        private void buttonConnect_Click(object sender, EventArgs e) {
            listBoxHeaders.Items.Clear();
            listBoxCookies.Items.Clear();
            TextHTML.Clear();
            hwr = (HttpWebRequest)WebRequest.Create(textBoxURL.Text);
            hwr.Method = "GET";
            hwr.CookieContainer = new CookieContainer();
            hwrsp = (HttpWebResponse)hwr.GetResponse();
            whc = hwrsp.Headers;
            
            for(int i = 0; i < hwr.Headers.Count; i++){
                listBoxMyHeaders.Items.Add(hwr.Headers.GetKey(i) + " = " + hwr.Headers.Get(i));
            }

            for(int i = 0; i < whc.Count; i++) {
                listBoxHeaders.Items.Add(whc.GetKey(i) + " = " + whc.Get(i));
            }

            hwrsp.Cookies = hwr.CookieContainer.GetCookies(hwr.RequestUri);
            foreach(Cookie cky in hwrsp.Cookies) {
                listBoxCookies.Items.Add(cky.Name + " = " + cky.Value);
            }

            Stream strm = hwrsp.GetResponseStream();
            StreamReader sr = new StreamReader(strm, Encoding.UTF8);

            ClassMyThread ThreadWithParam = new ClassMyThread(sr);
            ThreadWithParam.RunThreadResponseProc(sr);
            ThreadWithParam.RunThreadResponseProcMonitor();
        }




Это сообщение отредактировал(а) tht - 4.10.2010, 22:07
PM MAIL   Вверх
Экскалупатор
Дата 4.10.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



а что надо менять?
PM MAIL ICQ   Вверх
tht
Дата 4.10.2010, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



не работает this.myFormLink.TextHTML.Text += SR.ReadLine();
типа пытаюсь так обратиться из потока одного класса, для передачи текста(строки), к контролу формы другого класса, но данные не передаются.

Это сообщение отредактировал(а) tht - 4.10.2010, 22:15
PM MAIL   Вверх
Экскалупатор
Дата 4.10.2010, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



ты создаешь новый экземпляр класса формы.
myForm myFormLink = new myForm();
 но не показываешь его. какие изменения ты хочешь увидеть?
получается что у тебя форма из которой запускается поток и myFormLink никак не связаны

Добавлено через 1 минуту и 1 секунду
Цитата(tht @  4.10.2010,  20:09 Найти цитируемый пост)
ThreadPesponse

наверное именоль ввиду Response  )))
PM MAIL ICQ   Вверх
tht
Дата 4.10.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну а как связать ?
PM MAIL   Вверх
Экскалупатор
Дата 4.10.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



я думаю тебе надо почитать и понять что такое this. потом надо понять что в каждом классе(!) свой this. а передать надо как раз этот самый this из формы в класс потоков. в классе потоков надо написать что то вроде
Код

myForm myFormLink;
        public ClassMyThread(StreamReader streamReader, myForm form) 
        {
            SR = streamReader;
            myFormLink = form;
        }


это если передавать ссылку на форму в конструктор класса. а использовать потом через myFormLink.(и чего то там).
при этом надо не забыть что если ты хочешь обращаться напрямую к контролу то контрол должен быть public.
PM MAIL ICQ   Вверх
tht
Дата 4.10.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо за отзывчивость... буду дальше пытаться. только уже не сегодня, целый день мучаюсь над этим  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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