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

Передача параметров в поток, модифицировать код

01.10.2012, 17:24. Показов 2100. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сделать из однопоточной версии многопоточную. Когда начинаю передавать параметры в поток пишет:
No overload for 'Eratosfen' matches delegate 'System.Threading.ParameterizedThreadSta rt'
No overload for 'Fibonachi' matches delegate 'System.Threading.ParameterizedThreadSta rt'
No overload for 'Factorial' matches delegate 'System.Threading.ParameterizedThreadSta rt'

Что я делаю не так? Вот код програмы:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Management.Instrumentation;
namespace SPO_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //Эратосфен
            int ERA;
            ERA =Convert.ToInt32(textBox1.Text);
            Eratosfen(ERA);
 
            //Фибоначчи
            int fib;
            fib = Convert.ToInt32(textBox2.Text);
            Fibonachi(fib);
        
            //Факториал
            int fact;
            fact = Convert.ToInt32(textBox3.Text);
            Factorial(fact);
 
            //Потоки
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
            Thread thread1 = new Thread(new ParameterizedThreadStart(Eratosfen));
            thread1.Start(ERA);
            Thread thread2 = new Thread(new ParameterizedThreadStart(Fibonachi));
            thread2.Start(fib);
            Thread thread3 = new Thread(new ParameterizedThreadStart(Factorial));
            thread3.Start(fact);
            thread1.Join();
            thread2.Join();
            thread3.Join();
        }
 
        public void Eratosfen(int n)
        {
            string r;
            int[] ERAmas = new int[n];
            for (int i = 0; i < n; i++)
            {
                ERAmas[i] = i+1;
            }
            for (int i = 1; i < n; i++)
            {
                if (ERAmas[i] != 0)
                {
                    for (int j = i + 1; j < n; j++)
                    {
                        if (ERAmas[j] % ERAmas[i] == 0)
                            ERAmas[j] = 0;
                    }
                }
            }
            for (int i =0; i < n; i++)
            {
                if (ERAmas[i] != 0)
                {
                    r = Convert.ToString(ERAmas[i]);
                    listBox1.Items.Add("Решето Эратосфена" +" "+ r);
                }
            }
        }
        public void Fibonachi(int n)
        {
            listBox1.Items.Add(" ");
            string r = "";
            int[] REZFIB = new int[n];
            REZFIB[0] = 1;
            REZFIB[1] = 2;
            for (int i = 2; i < n; i++)
            {
                REZFIB[i] = REZFIB[i - 2] + REZFIB[i - 1];
            }
            for (int i = 0; i < n; i++)
            {
                r = Convert.ToString(REZFIB[i]);
                listBox1.Items.Add("Числа Фибоначчи"+" "+r);
            }
        }
        public void Factorial(int n)
        {
            listBox1.Items.Add(" ");
            string r = "";
            int rez = 1;
            for (int i = 1; i < n + 1; i++)
            {
                rez = i * rez;
            }
            r = Convert.ToString(rez);
            listBox1.Items.Add("Факториал"+" "+r);          
        }
    }
}
Вложения
Тип файла: zip SPO_2.zip (34.1 Кб, 5 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2012, 17:24
Ответы с готовыми решениями:

Передача параметров в поток
Всем привет! Знаю что тема где-то была, не нашел. Нужно запустить в потоке метод с параметрами без Parametrize. Видел раньше через...

Передача в поток несколько параметров
В отдельном потоке делаю открытие окна. Нужно в поток передать текст для заголовка окна и собственно его содержимое. Делал так: public...

Передача параметров в поток и возврат результата
Нужно распараллелить одну задачу и для этого передавать параметры в поток, а затем возвращать результат в виде double. Ошибка вот здесь: ...

12
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.10.2012, 17:46
C#
1
public void Eratosfen(int n)
замени на
C#
1
2
public void Eratosfen(object o){
   int n = o as int;
ну и с другими так же. но имей ввиду, что из других трэйдов ты не сможешь так запросто сделать в твоей ф-ии:
C#
1
listBox1.Items.Add("Решето Эратосфена" +" "+ r);
1
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.10.2012, 17:48
Тип параметра для делегатов должен быть object, а не int.
Переделайте все методы:
C#
1
2
3
        public void Factorial(object objectParameter)
        {
           int n = (int)objectParameter;
Добавлено через 26 секунд
Цитата Сообщение от novi4ok Посмотреть сообщение
int n = o as int;
as не может применяться к int.
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.10.2012, 17:54
Цитата Сообщение от turbanoff Посмотреть сообщение
as не может применяться к int.
вполне допускаю. но с этим тс справится самостоятельно за секунды. я такую ерунду в голове стараюсь не держать.
1
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
01.10.2012, 18:10
Цитата Сообщение от novi4ok Посмотреть сообщение
вполне допускаю. но с этим тс справится самостоятельно за секунды. я такую ерунду в голове стараюсь не держать.
Это да, но только если он знает, что такое as..
Кстати, есть логический смысл, почему value-типы и as не совместимы. Потому что as предполагает возможность вернуть null, а присваивать null можно только ссылочным и nullable типам.
2
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.10.2012, 18:15
логический смысл можно найти везде при желании. но как-то выруливает компилятор и рантайм, если написать
C#
1
int i = (int) "abcd";
?
вопрос формы записи токмо. просто решили сделать так, могли и иначе, и тоже был бы "логический смысл".
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
05.10.2012, 21:28
за эту строчку
C#
1
 System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
прибить мало.... студенты..... что и говорить
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
05.10.2012, 21:59
держи и учись... студент...

писал на MS VS 2010 так что не обсудь, если что выковыряй *.cs файлы и сделай импорт в 2008
Вложения
Тип файла: zip SPO_2.zip (42.2 Кб, 16 просмотров)
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
05.10.2012, 22:04
Цитата Сообщение от turbanoff Посмотреть сообщение
as не может применяться к int.
Да что вы говорите... а как же операция "is" которая вместе с операцией "as" в C# применяется при касте объектов к нужному типу?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
05.10.2012, 23:29
агерон, да ладно, а как же то, что as возвращает null? Или в вашем C# в порядке вещей ValueType'ам присваивать null?
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
05.10.2012, 23:56
а null дорогой не ошибка... а результат некоректного использования операции, я не зря упомянул операцию "is"... корректное приведение типов выглядит так!
C#
1
2
 if (data is ValueType)
  ValueType result = data as ValueType
а прямой каст
C#
1
 ValueType data = (ValueType)data;
в случае когда data = null приведет к NullReferenceException, либо к другим исключениям приведения типа если тип data не является ValueType или его наследником
Учите мат часть юноша
0
06.10.2012, 01:54

Не по теме:

Я не знаю, какие наркотики вы принимаете, но мелкомягким думаю виднее

Пример -> Последствия

1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
08.10.2012, 06:17
Да был не прав... признаю, просто давно не работал на прямую с преобразованием ValueType... все больше классы да классы :-D, вот и ошибся немного
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2012, 06:17
Помогаю со студенческими работами здесь

Передача параметров в поток
Создаю и запускаю потоки так: // CountThreads - кол-во потоков, введенных через поле ввода Threads = new Thread; for...

Передача в поток параметров
Ку. Надо создать поток, а потом, стартовать с заданными параметрами.. Пробую так: Thread thread = new Thread(Send); ...

Передача параметров (тоесть больше 1) в поток
int id = 1; string qqq = &quot;qqq&quot;; Thread x = new Thread(qwer); x.Start(); // если бы добавили ещё 1 перегрузку метода которая принимала...

Передача параметров в поток
Добрый день. Имеется основная форма, где объявлена переменная AnsiString LineMessage. Там же в нее заносится содержание текстового файла....

Передача параметров в поток
Почему в потоке (точнее в функции, которую он отрабатывает) после преобразования указателя &quot;r2&quot; к типу int получаются значения не...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru