インターネットから何かをダウンロードするスレッドを使用しています。 スレッドメソッド内にループがありません。私はStreamReader.ReadToEnd()
メソッドを使用していますので、 私のスレッドが何か大きなものをダウンロードしているときにこのスレッドを停止したいです。好ましくはThread.Abort()メソッドなし。 GCスレッドにきれいにするか、これを終了することは可能ですか?C#のスレッドを瞬時に削除する方法
3
A
答えて
12
ReadToEnd
を実行しないで、一度にループを作成してX文字を読み込みます(または、一度に1行ずつReadLine
で読み込みます)。ループ内でAutoResetEvent
が(.WaitOne(0)
を使用して)設定されているかどうかを確認し、ループが終了する場合。
ダウンロードを停止するときに、他のスレッドでリセットイベント(Set
を使用)を設定します。
2
BaseStream BeginRead()asyncメソッドを使用できます。独自の専用スレッド(1MBのコミットされたメモリを消費する)を生成するのではなく、これを使用する方がよいでしょう。非同期メソッドは、I/O完了ポートを使用する方が効率的です。
new StreamReader(aStream).BaseStream.BeginRead()
はここにいくつかの詳細情報http://msdn.microsoft.com/en-us/library/system.io.stream.beginread.aspx
非同期読み込みを停止に関連するスレッドです。
0
何ジョージ・ダケット氏は述べていますが、スレッド/非同期タスクを開始し、IsCancellationRequested
=真
関連する問題
- 1. 親スレッドから子スレッドを削除する方法 - C
- 2. スレッド完了時にスレッドからベクトルを削除する
- 3. C# - 一時的なインターネットファイルを削除する方法
- 4. クロージャーで瞬時の時刻を変換する方法
- 5. 流星の変化を瞬時にする方法は?
- 6. スレッドの配列から特定のスレッドを削除する方法
- 7. スレッドをC#で即座に削除するには?
- 8. Qt/C++で確実にスレッドを削除するには?
- 9. テーブルビューに瞬時にセルを追加する方法
- 10. キャンバスのサイズ変更時に瞬きを避ける方法
- 11. は瞬時に
- 12. リストアイテムの削除時にVueコンポーネントをリフレッシュする方法は?
- 13. Spring/Hibernateのテスト - 終了時にスキーマを削除する方法?
- 14. 一時的にscene2d内のアクターを削除する方法
- 15. getstr()の後にテキストを削除する方法C++ ncurses
- 16. C#のアプリケーションアンインストール時にトレイアイコンを削除するには
- 17. C#.NETアプリケーションのアンインストール時にフォルダを削除するには?
- 18. 削除時に行を検証する方法は?
- 19. 一時的にXCodeでVuforiaを無効/削除する方法
- 20. 削除時にモーダルを追加する方法
- 21. 削除時に名前抽出をスピードアップする方法
- 22. 変更時にスパンメッセージとエラークラスを削除する方法
- 23. Subversion:コミット時にプロパティを削除する方法
- 24. Linq - 一括削除時にロックを防止する方法
- 25. クリック時にsqlエントリを削除する方法
- 26. モーダルポップアップと提出時にURLを#削除する方法
- 27. C++スレッドが末尾で自分自身を削除する
- 28. 瞬時にズームイン/アウト
- 29. NSAnimationContextは瞬時に
- 30. matplotlib.pyplot.Figure.showは瞬時に
+1場合
CancellationToken
にし、ループチェックに合格するための.Net 4Task
クラスを使用することができます。終わりまでの読み込みは本当に悪いです。ノーアボートを忘れてしまいます。そうでなければ、起動に割り当てることができない多くのメモリを使用する可能性があります(64または128kバッファで十分かもしれません)。 – TomTomStreamReaderでは、Xバイトは読み取られません。その考えをReadLine()に置き換えます。 –