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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки 
:(
    Опции темы
Curle
Дата 18.1.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите как создать поток на public string Name(string s)?
PM MAIL   Вверх
arilou
Дата 18.1.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Curle
Если ты имеешь ввиду запустить метод Name(string) в отдельном потоке, то

Код

using System.Windows.Forms;

class myclass
{
  public string Name(string p)
  {
     MethodInvoker mi = new MethodInvoker(nameImpl);
     _miPParam = p;
     mi.BeginInvoke(null, null);
  }

  string _miPParam = string.Empty;
  void nameImpl()
  {
      // код, который был раньше в Name
  }
}


Это быстрое решение без дополнительной работы. Можно вместо MethodInvoker использовать свой делегат с такими параметрами, как тебе нужно.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Curle
Дата 20.1.2006, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

public string Name(string p) //ругается на string, return'а то нету
...
string _miPParam = string.Empty;    
  void nameImpl()    
  {    
      //здесь нельзя использовать return ""
  }

PM MAIL   Вверх
-ser-
Дата 20.1.2006, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



если честно, я тоже не понял, поскольку MethodInvoker может использоваться только для void методов. просто используй делегат. ты какую версию .нет используешь 1.1 или 2.0?

Это сообщение отредактировал(а) -ser- - 20.1.2006, 11:28


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
arilou
Дата 20.1.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(-ser- @ 20.1.2006, 11:11 Найти цитируемый пост)

если честно, я тоже не понял, поскольку MethodInvoker может использоваться только для void методов


Интересно, как при асинхронной работе можно вернуть значение из метода? Поэтому только для void методов это получится.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
-ser-
Дата 20.1.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



с MethodInvoker согласен, работает.
Цитата
как при асинхронной работе можно вернуть значение из метода

дождаться его завершения, например так
Код

        class MyClass
        {
            string _miPParam = string.Empty;
            
            public string Name( string p )
            {
                MethodInvoker mi = new MethodInvoker( nameImpl );
                _miPParam = p;
                IAsyncResult iar = mi.BeginInvoke( null, null );
                mi.EndInvoke( iar );
                return _miPParam;
            }

            void nameImpl()
            {                
                _miPParam = _miPParam.Insert( 1, "+" );
            }
        }

а в противном случае у нас Name возвратит не вычисленное методом nameImpl() значение.


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
arilou
Дата 20.1.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

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



Цитата(-ser- @ 20.1.2006, 12:40 Найти цитируемый пост)

дождаться его завершения, например так

Дык! В чем смысл асинхронного запуска в данном случае, если ты тормозишь свой поток до завершения другого?


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Curle
Дата 20.1.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

ты какую версию .нет используешь 1.1 или 2.0?

2.0

MethodInvoker mi = new MethodInvoker(netImpl("test")); как можно так сделать?
создать поток с родным параметром?
PM MAIL   Вверх
mr.DUDA
Дата 20.1.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Curle @ 20.1.2006, 15:43 Найти цитируемый пост)
создать поток с родным параметром?


Так:
Код
using System;
using System.Threading;

class MyClass
{
    public delegate string MyMethodInvoker(string arg);

    public string Name(string arg)
    {
        MyMethodInvoker inv = new MyMethodInvoker(nameImpl);
        IAsyncResult iar = inv.BeginInvoke(arg, null, null);

        // ...поток работает...
        while(!iar.IsCompleted) Thread.Sleep(10);

        return inv.EndInvoke(iar);
    }

    string nameImpl(string arg)
    { 
        return "blablabla - " + arg;
    }

    public MyClass() {}
}


class TestApp
{
    [STAThread]
    static void Main(string[] args)
    {
        Console.WriteLine(new MyClass().Name("test"));
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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