переназначить тему другому методу vb.net

2

Можно ли переназначить поток другому методу после его создания. Если нет, существуют ли альтернативы?

Теги:
multithreading

2 ответа

2
Лучший ответ

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

var thread = new Thread(Method1);
thread
    .GetType()
    .GetMethod("SetStartHelper", BindingFlags.Instance | BindingFlags.NonPublic)
    .Invoke(thread, new object[] { new ThreadStart(Method2), 0 });
thread.Start();
  • 0
    Обратите внимание, что если это вызывается после запуска потока, это не имеет никакого эффекта
  • 0
    Да, именно поэтому я начал свой ответ с, Unless the thread has started ...
1

Если вы не делаете какие-то странные вещи с помощью API отладки или не размещаете CLR и не играете с внутренними компонентами, то никоим образом нить не может быть "переназначена" новому методу, поскольку это связано с управлением стеком потока.

Что вы можете сделать, так это использовать шаблон команды в своем потоке, чтобы отправить ему рабочие "полезные нагрузки", которые могут меняться со временем:

        Action worker=null;
        bool running = true;
        var t = new Thread(() =>
                            {
                                while(running)
                                {
                                    Action theWorker = worker;
                                    if(theWorker!=null)
                                    {
                                        theWorker();    
                                    }
                                    Thread.Sleep(10);
                                }
                            });
        worker = new Action(() => Console.WriteLine("hi mum"));

        t.Start();
        Thread.Sleep(100);
        worker=new Action(()=>Console.WriteLine("I can see my house from here"));
        Thread.Sleep(100);
        running = false;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню