Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
13 / 13 / 7
Регистрация: 10.07.2011
Сообщений: 104
1

Потоки

30.03.2013, 22:09. Показов 1674. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
class opponent
{
move(Form1 form)
{
//********
}
}

C#
1
2
3
4
5
6
7
8
9
10
public partial class Form1 : Form
{
opponent op = new opponent();
        private void Form1_Load(object sender, EventArgs e)
        {
           op.create(this);
           Thread thread = new Thread(op.move(this));
           thread.Start();                        
        }
}
Нужно запустить в потоке метод create из класса opponent, данным способом не получается. Как это сделать?

Добавлено через 8 минут
Цитата Сообщение от maksim0308 Посмотреть сообщение

Нужно запустить в потоке метод create из класса opponent, данным способом не получается. Как это сделать?
Нужно запустить в потоке метод move из класса opponent, данным способом не получается. Как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2013, 22:09
Ответы с готовыми решениями:

Байтовые потоки и потоки символов
Объясните, пожалуйста подробно что имелось ввиду На самом низком уровне все операции ввода/вывода...

Потоки
Идет копирование файлов в отдельном потоке, что бы была доступна главная форма без зависания. У...

Потоки
Нужна небольшая помощь с задачей на потоки. На C# давно не писал и не помню многих моментов. ...

потоки...
Народ, вот создай 10 потоков, ну например они будут выводить числа в рич текст бокс private void...

23
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 00:23 2
наверно вот так:
C#
1
2
3
4
5
6
 private void Form1_Load(object sender, EventArgs e)
        {
           op.create(this);
           Thread thread = new Thread(new ParameterizedThreadStart(op.move));
           thread.Start(this);                        
        }
1
13 / 13 / 7
Регистрация: 10.07.2011
Сообщений: 104
31.03.2013, 00:47  [ТС] 3
IamRain,
Миниатюры
Потоки  
0
Заблокирован
31.03.2013, 00:55 4
maksim0308, сигнатура метода не подходит для создания делегата.. да и вообщем какая разница, все равно если ты и запустишь тред у тебя он упадет, т.к. ты наверняка не знаешь Invoke и все что связано с контекстом GUI потока..
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 00:58 5
Цитата Сообщение от loro Посмотреть сообщение
maksim0308, сигнатура метода не подходит для создания делегата.. да и вообщем какая разница, все равно если ты и запустишь тред у тебя он упадет, т.к. ты наверняка не знаешь Invoke и все что связано с контекстом GUI потока..
Странно, проверил у себя, создал класс с одним методом, принимающим int и возвращающим void.
Сигнатура не подходит, но она подходит.
1
Заблокирован
31.03.2013, 01:00 6
C#
1
2
Thread thread = new Thread(o => op.move((Form1)o));
thread.Start(this);
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 01:01 7
maksim0308, Сигнатура метода должна быть с одним параметром - строго Object
А при вызове передаем все что угодно - ковариация типов.
1
Заблокирован
31.03.2013, 01:10 8
Цитата Сообщение от IamRain Посмотреть сообщение
Сигнатура не подходит, но она подходит
это правда? тогда покажи код.. пойду напьюсь с горя..
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 01:10 9
loro, ну, можно и так.
1
Заблокирован
31.03.2013, 01:12 10
IamRain, да это да, но ты мне про свой пример покажи..
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 01:18 11
Цитата Сообщение от loro Посмотреть сообщение
это правда? тогда покажи код.. пойду напьюсь с горя..
Все все, я понял ошибку, признаю. Просто по факту, ковариация, поэтому подумал в список параметров можно все что угодно засунуть.
А оказывается нельзя.

Не по теме:

Тебя за что забанили? :)



Добавлено через 4 минуты
Хотя, все-таки, можно.
1
Заблокирован
31.03.2013, 01:24 12
Цитата Сообщение от IamRain Посмотреть сообщение
Тебя за что забанили?
за правду всегда бьют
1
IamRain
31.03.2013, 01:27
  #13

Не по теме:

С лямбда-expression халява такой код написать.
А без лямбды слабо? Не меняя сигнатуру :)

1
Заблокирован
31.03.2013, 01:29 14
IamRain, есть анонимные методы что та же фигня. вообще я так никогда не пишу.
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 01:32 15
Цитата Сообщение от loro Посмотреть сообщение
за правду всегда бьют
loro, Я вот и смотрю, пытаешься вернуть забаненные "печенюги".
1
Заблокирован
31.03.2013, 01:34 16
сигнатуру метода можно и нужно не менять, а завернуть его в другой метод с требуемой сигнатурой ни кто не мешает.

Добавлено через 1 минуту
IamRain, да нее мне это не всралось все.. просто делать ничего не хочется
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 01:39 17

Не по теме:

Стопэ, парень :)


Loro, просто спортивный интерес, получается невозможно поместить метод в Thread, если не юзать лямбду и не меняя сигнатуру?
С анонимным методом покажи как делается. чего-то я не догоняю. Лямбда использует анонимный метод, а как можно сделать, используя только анонимный метод, без лямбды?
Нужен ответ, возможно или нет.
0
13 / 13 / 7
Регистрация: 10.07.2011
Сообщений: 104
31.03.2013, 01:48  [ТС] 18
Цитата Сообщение от loro Посмотреть сообщение
C#
1
2
Thread thread = new Thread(o => op.move((Form1)o));
thread.Start(this);
Помогло, спасибо.
0
Заблокирован
31.03.2013, 02:06 19
Ответ: нельзя.
IamRain, анонимный метод это просто старый махнатый синтаксис, когда еще лямбд не было, он тебе точно не нужен.

получаешь нужную тебе сигнатуру просто создав враппер.
C#
1
2
3
4
5
6
7
8
private static void Do(object obj)
        {
            //а тут интерпритируй obj как хочешь, хоть массив, хоть делегат, кастишь к нужному типу/типам
            var parametrs = (object[]) obj;
            var op = (opponent) parametrs[0];
            var form = (Form1) parametrs[1];//это просто для перемера, чтобы метод Do статическим сделать.
            op.Move(form);
        }
Добавлено через 6 минут
C#
1
2
3
Thread thread = new Thread(Do);
object obj = new object[] { op, this};
thread.Start(obj);
1
3460 / 2471 / 695
Регистрация: 02.08.2011
Сообщений: 6,702
31.03.2013, 02:09 20
Замысловато и одновременно забавно.
Сижу, Троелсена перечитываю - раздел: понятие анонимных методов.
0
31.03.2013, 02:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2013, 02:09
Помогаю со студенческими работами здесь

Потоки
Как автоматически создать несколько потоков?

Потоки в С#
Здравствуйте! Помогите пожалуйтса с задачей на потоки Нужно разработать программу для сравнения...

потоки
Всем привет!!! Задача такая: нужно создать программу которая при запуске попросит ввести...

Потоки
Помогите пожалуйста с задачей : Дано два вектора X та Y, размерность которых NX та NY . Векторы...

Потоки в С#
как можно реализовать: если поток не запущен, то запустить его... ?

Потоки
Имеется такая ситуация: пишу программку которая пингует адрес, функция пинга вызывается из главного...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru