Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 09.02.2014, 17:06   #16
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Многопоточность.

Так подскажи как правильно. У меня других вариантов нет. Если делать отдельным классом, то из второго класса в класс формы не достучаться без ссылки. Подскажи как ссылку делать на метод/класс и т.д. На тех ресурсах что вы мне давали не раскрывается вопрос решения моей проблемы.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 09.02.2014, 17:48   #17
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,508
Написано 2,963 полезных сообщений
(для 5,252 пользователей)
Ответ: Многопоточность.

Так что мешает в конструктор "отдельного класса" передать ссылку на форму?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 09.02.2014, 18:14   #18
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Многопоточность.

Подскажи как ссылку делать на метод/класс и т.д. На тех ресурсах что вы мне давали не раскрывается вопрос решения моей проблемы. Вот как выглядит моя программа в общих чертах:
namespace D
{
    public partial class Mainwindow : Form
    {
//---------------------------------------------------------------------------------------
//Глобальные переменные
        public string s;
// --------------------------------------------------------------------------------------
//=====================================================================================
        public Mainwindow()
        {
            InitializeComponent();
            Visible = false;
            Dialogbox.ReadOnly = true;
            выходToolStripMenuItem.Enabled = false;
            выходToolStripMenuItem.Visible = false;
            Point tempPoint = new Point(100, 100);
            this.DesktopLocation = tempPoint;// почему-то не работает

        }
//======================================================================================     
        private void button1_Click(object sender, EventArgs e)
        {
            s = message.Text;
            if (s != "")
            {
                Random random = new Random();
                var additionalText = s + "\n";
                var start = Dialogbox.Text.Length;
                var length = additionalText.Length;
                Dialogbox.AppendText(additionalText);
                Dialogbox.Select(start, length);
                Dialogbox.SelectionAlignment = HorizontalAlignment.Left;
                message.Text = "";

                Thread thd = new Thread(Th);
                thd.Start(); 
              
            }
        }
// ====================================================
        public void Th()
        {
            if (s != "112")
                {
                    // Обработка полученной переменной, составление выводимых данных в нее же.
                    var additionalText = s + "\n";
                    if (Dialogbox.InvokeRequired) //Если обратились к контролу не из того потока, в котором конрол был создан, то...
                      Dialogbox.Invoke((Action)Thinks); //Вызываем этот же метод через Invoke
                    else
                 {
                     answer(additionalText);
                 }
                }
                else
                {
                    if (Dialogbox.InvokeRequired) //Если обратились к контролу не из того потока, в котором конрол был создан, то...
                        Dialogbox.Invoke((Action)Thinks); //Вызываем этот же метод через Invoke
                    else
                    {
                       //работаем с другим компонентом этой формы
                    }
                    
                }
            }
//======================================================
        private void answer(string additionalText)
{
                    var start = Dialogbox.Text.Length;
                    var length = additionalText.Length;
                    Random random = new Random();
                    Dialogbox.AppendText(additionalText);
                    Dialogbox.Select(start, length);
                    Dialogbox.SelectionAlignment = HorizontalAlignment.Right;

                    Dialogbox.Select();
                    Dialogbox.Select(Dialogbox.Text.Length, 0);
                    Dialogbox.ScrollToCaret();
}

    }
}

Причиной того что окно подвисает во время выполнения скорее всего в том что смысла в моем коде как в куске *****...
Скорее всего (я уверен на 70% с небольшим) что метод Invoke вторгается в поток формы, поэтому функция выполняется два раза (первый в фоне, второй после вызова Th в Invoke) и повторно делает вычисления.
Бред в том что если делать эту проверку в answer, то я не смогу получить строку на выход.
Остается тогда извращаться: добавлять переменную, которая будет регулировать второй вход и пропускать вычисления.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 09.02.2014, 18:15   #19
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Плохо Ответ: Многопоточность.

И да: весь мой вопрос заключался в том чтобы вы мне рассказали как ссылку на класс сделать!
Ах да, вот:
Сообщение от pax Посмотреть сообщение
ну преобразуй его в Action и метод UpdateForm - это твой метод обновления интерфейса

form.Invoke((Action) (()=>{UpdateForm(param1param2);}));

...

void UpdateForm(param1param2)
{


либо просто
form.Invoke((Action) (()=>{
// код обновления
})); 

Вспомнил про этот пост и сделал так как ты говорил. Теперь не зависает. Но что если я начну рисовать на панели из другого потока? Мне точно нужно знать как сделать ссылку из дочернего класса в главный.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 09.02.2014, 18:31   #20
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,508
Написано 2,963 полезных сообщений
(для 5,252 пользователей)
Ответ: Многопоточность.

Invoke надо вызывать для обновления интерфейса, а не для выполнения функции с основной задачей, которая должна быть в отдельном потоке. Т.е. всегда когда настал момент обновить интерфейс - вызываешь Invoke с обновлением данных в контролах, все остальное в отдельном потоке. Т.е. основная задача Invoke - записать например текст в метку или что-то подобное.

PS: в коде я ничего не понял и разбираться нет времени.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 09.02.2014, 22:25   #21
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Многопоточность.

все переменные на классы и есть ссылки если не указано обратного
(Offline)
 
Ответить с цитированием
Старый 10.02.2014, 03:33   #22
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Многопоточность.

Ребятки, не кормите help-вампира, пускай сначала язык и платформу освоит.
(Offline)
 
Ответить с цитированием
Старый 10.02.2014, 11:42   #23
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Многопоточность.

Сообщение от pax Посмотреть сообщение
Так что мешает в конструктор "отдельного класса" передать ссылку на форму?
не красиво как то
(Offline)
 
Ответить с цитированием
Старый 10.02.2014, 12:34   #24
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,508
Написано 2,963 полезных сообщений
(для 5,252 пользователей)
Ответ: Многопоточность.

Сообщение от radiobutton Посмотреть сообщение
не красиво как то
А что красиво? Использовать статические ссылки или IoC? Все в зависимости от сложности приложения.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 10.02.2014, 17:36   #25
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Многопоточность.

Сообщение от pax Посмотреть сообщение
А что красиво? Использовать статические ссылки или IoC? Все в зависимости от сложности приложения.
Передовать делегат/ юзать события.

Но опять же это такое.
(Offline)
 
Ответить с цитированием
Старый 11.02.2014, 04:21   #26
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Многопоточность.

Да нафиг мелочиться, внедряйте сразу MVVM.

Радиокнопка - тролль )
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 08:05.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com