2012-01-24 3 views
3

У меня есть метод в классе, который мне нужно выполнить дважды асинхронно. Класс имеет конструктор, который принимает URL в качестве параметра:выполнить метод C# асинхронно с помощью Threading

ABC abc= new ABC(Url); 

// Create the thread object, passing in the abc.Read() method 
// via a ThreadStart delegate. This does not start the thread. 
Thread oThread = new Thread(new ThreadStart(abc.Read()); 


ABC abc1= new ABC(Url2) 

// Create the thread object, passing in the abc.Read() method 
// via a ThreadStart delegate. This does not start the thread. 
Thread oThread1 = new Thread(new ThreadStart(abc1.Read()); 

// Start the thread 
oThread.Start(); 
// Start the thread 
oThread1.Start(); 

Является ли это так, как это работает? Может ли кто-нибудь помочь?

+0

вы также можете попробовать BackgroundWorker, если вам это подходит –

ответ

3

Отбросьте круглые скобки, чтобы создать делегат:

Thread oThread = new Thread(new ThreadStart(abc.Read)); 

И сделать то же самое для oThread1. Вот MSDN's Delegates Tutorial.

+0

спасибо minitech .. как вы передаете URL-адрес параметра конструктору? – srikanth

+0

@srikanth: Похоже, вы уже это делаете ... 'abc.Read' все равно может правильно ссылаться на' this'. – Ryan

+0

Мне нужно отправить два разных URL-адреса для каждого экземпляра класса ABC. – srikanth

3

Вы должны изменить свое ThreadStart создание использовать метод в качестве мишени вместо вызова метода

Thread oThread = new Thread(new ThreadStart(abc.Read); 

Обратите внимание, как я использовал abc.Read вместо abc.Read(). Эта версия заставляет делегата ThreadStart указать метод abc.Read. Первоначальная версия abc.Read() немедленно вызывала метод Read и пыталась преобразовать результат в делегат ThreadStart. Это, вероятно, не то, что вы намеревались

+0

@JaredPar .. как вы передаете URL-адрес параметра конструктору класса ABC? Мне нужно отправить два разных URL-адреса для каждого экземпляра класса ABC. – srikanth

+0

@srikanth вы пытаетесь создать экземпляры в фоновом потоке? – JaredPar

+0

р ... я понял. В противном случае код, который у меня есть, работает нормально .. асинхронно выполняет метод Read() с разными URL-адресами. Является ли этот поток безопасным и будет ли он создавать какие-либо проблемы, как только мы перейдем к Prod? – srikanth

1

Вы также можете сделать это:

Thread oThread1 = new Thread(() => abc1.Read()); 

Вы можете передать лямбда в к Thread конструктору вместо newing нового ThreadStart объекта.

У Джозефа Альбахари отличное online resource про резьбу. Очень легко читать и много примеров.

Смежные вопросы