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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выполнить метод в запускающем потоке? 
:(
    Опции темы
_hunter
  Дата 15.5.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



Добрый день.

Возникла необходимость выполнить метод потока в потоке его вызвавшем. Т.е. TestProc1/TestProc2 нужно выполнить в "Main Thread". Но ни первый ни второй метод этого не делают :(
(Как проверяю -- просто ставлю бряки на bool stop и в панельке "Debug Location" смотрю на "Thread")

Код

using System.Threading;

namespace ThreadTest
{
    public class TestThread1
    {
        public delegate void testDelegate ();

        public testDelegate TestDelegate;

        public TestThread1 ()
        {

        }

        public void TestThreadProc ()
        {
            if (TestDelegate != null)
                TestDelegate();
        }
    }

    public class TestThread2
    {
        public delegate void testDelegate ();

        public event testDelegate TestEvent;

        public TestThread2 ()
        {

        }

        public void TestThreadProc ()
        {
            if (TestEvent != null)
                TestEvent();
        }
    }

    class Program
    {
        static void Main (string[] args)
        {
            {
                TestThread1 threadObj1 = new TestThread1();

                Thread thread1 = new Thread(new ThreadStart(threadObj1.TestThreadProc));
                threadObj1.TestDelegate = new TestThread1.testDelegate(TestProc1);
                thread1.Start();
            }

            {
                TestThread2 threadObj2 = new TestThread2();

                Thread thread2 = new Thread(new ThreadStart(threadObj2.TestThreadProc));
                threadObj2.TestEvent += new TestThread2.testDelegate(TestProc2);
                thread2.Start();            
            }
        }

        private static void TestProc1 () 
        {
            bool stop = true;
        }

        private static void TestProc2 ()
        {
            bool stop = true;
        }
    }
}


Можно ли как-то "выбрать" поток в котором будет выполняться код?

С уважением...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Partizan
Дата 15.5.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



_hunter, если .NET 3.5, то при создании объекта, можно получить текущий Dispatcher (из System.Windows.Threading в WindowsBase.dll), а потом вызвать у него Invoke, передав в качестве параметра нужный делегат


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
_hunter
Дата 15.5.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



2.0 :(


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Partizan
Дата 16.5.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


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

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



_hunter, можно сделать также как в BackgroundWorker реализовано...создаётся приватный 

private AsyncOperation asyncOperation;

после чего, из второго потока у asyncOperation вызывается метод Post, в который передаётся делегат для выполнения

http://msdn.microsoft.com/en-us/library/sy...ation.post.aspx


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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