Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/50: Рейтинг темы: голосов - 50, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 59

Потоки. Возвращение значения

03.04.2013, 21:57. Показов 9968. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть библиотека классов. Там не статический класс, в нем, очевидно, не статические методы. В методе Main я создаю экземпляр этого класса. Затем вызываю метод, который что-то там считает и возвращает значение.
C#
1
2
3
4
...
Class1 obj = new Class1(a, b, c);
BigInteger x = obj.Go()
...;
А вот код из библиотеки классов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Class1
    {
public class1(BigInteger x, BigInteger y, BigInteger z)// Конструктор.
        {
            ...
        }
public BigInteger Go()
        {
            // тут вызывается куча методов из этого класса. Что-то там считается и возвращает значение.
            ...
            return a; //Возвращаем в итоге переменную BigInteger.
        }
}
Нужно запустить это не в основном потоке, иначе программа не отвечает и тупой юзер её может закрыть.
В потоках не очень разбираюсь. Только начал их изучать. Подскажите пожалуйста как это сделать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2013, 21:57
Ответы с готовыми решениями:

Потоки и возвращение значения
Добрый день. Столкнулся с проблемой при написании многопоточного приложения. А именно-как получить результат работы метода, который...

C# поиск в файле и возвращение значения
Есть файл, с примерно таким содержанием: "items" { "4228" {

Возвращение значения из ComboBox в базу данных
как вернуть значение id в базу из combobox'a в котором отображаются названия категорий заполнение combobox'a try ...

46
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 59
05.04.2013, 15:19  [ТС]
Студворк — интернет-сервис помощи студентам
В начале обработчика кнопки и блокирую, да. Аборты убрал. Всё равно если тыкать подряд много раз, то подвисает.

Добавлено через 3 минуты
Тоесть если я например нажимаю эту кнопку с частотой 1 раз в секунду, то ничего не подвисает. А если с частотой 3 раза в секунду, то подвисает. Как то можно это исправить?

Добавлено через 2 минуты
Хотите проект выложу?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
05.04.2013, 15:32
Нет, весь проект не нужен. Покажите код обработчика нажатия на кнопку, полностью.
0
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 59
05.04.2013, 18:18  [ТС]
сейчас

Добавлено через 8 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            t = null;
            label2.Text = "Идёт процесс вычисления";
            date1 = DateTime.Now;
            #region Check
            // тут проверка входных данных. Ну там только положительные, целые и т д.
            #endregion
            BigInteger x = 0;
            Class1 obj = new Class1(a, b, p);
            MyThread v = new MyThread(obj);
            t = new Thread(v.MyThreadProc);
            t.Start();
            v.SomeEvent += () =>
            {
                x = v.GoResult;
                if (x == -1)
                {
                    MessageBox.Show("     Неправильные входные данные.\n      Введите правильные данные.");
                    label2.Text = null;
                }
                else
                {
                    this.textBox4.Text = x.ToString();
                    this.label2.Text = "Затраченное время: " + (DateTime.Now - date1).ToString();
                }
                button2.Visible = false;
                button1.Enabled = true;
            };
        }
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
06.04.2013, 20:12
MyThread убрал лишнее - теперь параметр результат вычислений передается в событие.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public class MyThread
    {
        public event Action<BigInteger> SomeEvent;
        private PolighHellman myval;
        public MyThread(PolighHellman myval)
        {
            this.myval = myval;
        }
        public void MyThreadProc()
        {
            BigInteger GoResult = myval.Go();
            if (SomeEvent != null)
               SomeEvent(GoResult);
        }
    }
Далее - новый завел метод в классе формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void ShowResult(BigInteger result)
        {
            if (result == -1)
            {
                MessageBox.Show("                            Неправильные входные данные.\nОснование 'а' не является первообразным корнем по модулю 'p'.");
                label2.Text = null;
            }
            else
            {
                this.textBox4.Text = result.ToString();
                this.label2.Text = "Затраченное время: " + (DateTime.Now - date1).ToString();
            }
            button2.Visible = false;
            button1.Enabled = true;
        }
Теперь обработчик нажатия на кнопку выглядит так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void button1_Click(object sender, EventArgs e)
        {
            button1.Enabled = false;
            button2.Visible = true;
            label2.Text = "Идёт процесс вычисления";
            date1 = DateTime.Now;
            #region Check
            // тут проверка входных данных. Ну там только положительные, целые и т д. 
            #endregion
            PolighHellman obj = new PolighHellman(a, b, p);
            MyThread v = new MyThread(obj);
            t = new Thread(v.MyThreadProc);
            t.Start();
            v.SomeEvent += result => Invoke(new Action(() => ShowResult(result)));
        }
ShowResult вызывается с помощью Invoke - так как SomeEvent вызывается из другого потока
1
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 59
06.04.2013, 20:30  [ТС]
а что такое result ?
Вы там пишите
C#
1
v.SomeEvent += result => Invoke(new Action(() => ShowResult(result)));
, как так получается, если result даже не объявлен нигде?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
06.04.2013, 21:10
Тип SomeEvenet - Action<BigInteger>, метод с одним параметром BigInteger.
result - это как раз параметр этого метода.

Можете переписать вот так, чтобы понятнее было:
C#
1
            v.SomeEvent += CallShowResult;
C#
1
2
3
4
        private void CallShowResult(BigInteger result)
        {
            Invoke(new Action(() => ShowResult(result)));
        }
1
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 59
06.04.2013, 21:16  [ТС]
Спасибо большое. Вы очень помогли (серьёзно, очень помогли).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2013, 21:16

Возвращение одного значения из базы данных
Допустим пишу SQL запрос SELECT Фамилия FROM Список WHERE ='32' Этим запрсом я верну человека который у меня 32 в списке,так вот...

Возвращение значения null
как поступить в данном случае, при запросе WMI к классу WIN32_Processor посредством L2CacheSize конструктор выдает ошибку о том что...

Потоки и возвращение значения
void main() { //... Thread th_ptr = new Thread(delegate() { fucn(i); }); th_ptr.Start(); int t=//сюда надо записать значение,...

Установка значения трекбара по нажатию кнопки, и последующее возвращение начального значения
В общем проблема вот в чем: Делаю плеер, и нужна кнопка для отключения звука, громкость на 0 то есть, и последующего возвращения...

Возвращение значения из Taska
Коллеги, не могу понять почему при вызове вызов таска из метода кнопки он жалуется, что невозможно ожидание String В чем здесь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
Новая последнея моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru