2012-01-24 8 views
3

私は2回非同期に実行する必要があるクラスのメソッドを持っています。スレッドを使用して非同期にC#メソッドを実行します

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(); 

これはそれが機能する方法です: クラスには、パラメータとしてURLを受け取るコンストラクタを持っていますか?誰も助けることができますか?

+0

あなたに合っているなら、BackgroundWorkerを試すこともできます –

答えて

3

ドロップ括弧を意図したものでない可能性があります。ここにはMSDN's Delegates Tutorialがあります。

+0

ありがとうございましたminitech ..あなたはどのようにコンストラクタにパラメータURLを渡しますか? – srikanth

+0

@srikanth:あなたは既にそれをやっているようです... 'abc.Read'はまだ' this'を適切に参照できます。 – Ryan

+0

ABCクラスのインスタンスごとに2つの異なるURLを送信する必要があります。 – srikanth

3

あなたは代わりに私がabc.Read代わりのabc.Read()を使用する方法方法

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

お知らせを呼び出すターゲットとしてメソッドを使用するようにThreadStart作成を変更する必要があります。このバージョンではを指すようにThreadStartデリゲートが発生します。 abc.Read()元のバージョンですぐにReadメソッドが呼び出され、結果がThreadStartデリゲートに変換されました。

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

そしてoThread1のために同じ操作を行います。これは、デリゲートを作成する

+0

@JaredPar ..どのようにしてABCクラスのコンストラクタにパラメータURLを渡しますか? ABCクラスのインスタンスごとに2つの異なるURLを送信する必要があります。 – srikanth

+0

@srikanthあなたはバックグラウンドスレッドでインスタンスを作成しようとしていますか? – JaredPar

+0

r ...私はそれを考え出した。そうでなければ、私が持っているコードは正常に動作しています。別のURLでRead()メソッドを非同期に実行しています。そのスレッドは安全で、Prodに移行すると問題は発生しますか? – srikanth

1

また、これを行うことができます。

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

あなたが代わりにNEWINGアップ新しいThreadStartオブジェクトのThreadコンストラクタにしてラムダを渡すことができます。

Joseph Albahariさんはスレッディングについて偉大な人です。online resource非常に読みやすく、たくさんの例があります。

関連する問題