トップページ > プログラム > 2015年10月12日 > wjSQdsNO

書き込み順位&時間帯一覧

20 位/137 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000001000200003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net

書き込みレス一覧

ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net
151 :デフォルトの名無しさん[sage]:2015/10/12(月) 15:51:43.51 ID:wjSQdsNO
用途によるだろうけど、普通は、ジェネリック対応のクラスだけで間に合う。
ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net
159 :デフォルトの名無しさん[sage]:2015/10/12(月) 19:08:20.89 ID:wjSQdsNO
>>149
なんでTaskの中でTask作ってんの?
継続タスクにしたいなら、ContinueWithでつなげれば良いだろう。
あと、そのケースなら Task.Factory.StartNewじゃなくて Task.Runを使ったほうがすっきりするだろう。
ちなみにTaskのDispose()は、無理に呼ぶ必要はない。むしろ無闇に呼び出したらタイミングによっては、厄介なことになる。

>>158
CancellationTokenSourceは、一度限り、再度使いたいならCancellationTokenSourceを作り直すしかない。
キャンセルされてたら、tokenSource.Token.ThrowIfCancellationRequested()が例外を吐いて強制終了するだけなんで
ボタンが復帰しないのは当然のこと。
ふらっと C#,C♯,C#(初心者用) Part117 [転載禁止]©2ch.net
161 :デフォルトの名無しさん[sage]:2015/10/12(月) 19:51:26.84 ID:wjSQdsNO
>>160 たぶんやりたいことは、こんなところか。

private CancellationTokenSource cancelSource;
private void button1_Click( object sender , EventArgs e ) {
if( this.cancelSource != null )
this.cancelSource.Cancel(); // まだキャンセルされてなければキャンセル要求

this.button1.Enabled = false;
this.cancelSource = new CancellationTokenSource();
var token = this.cancelSource.Token;

Task.Factory.StartNew( () =>{
for( int i = 0; i < 100000; i++ ){
token.ThrowIfCancellationRequested();
Thread.Sleep( 100 );
}
} , token )
.ContinueWith( task => {
// 継続タスク(UIスレッドに切り替わって実行される)
// キャンセルされようとも正常に完了しようとも、例外が発生しても実行される。
this.button1.Enabled = true;
} , TaskScheduler.FromCurrentSynchronizationContext() );
}

private void button2_Click( object sender , EventArgs e ) {
if( this.cancelSource != null ) {
this.cancelSource.Cancel(); // キャンセル要求
this.cancelSource = null;
}
}


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。