このコードでは、Start関数を起動した後、バインドされた「キャンセル」ボタンを使用してタスクを停止しようとしましたが、処理されなかったことを示す 'System.OperationCanceledException'ユーザーコードで...なぜ私のtry catchブロックでThrowIfCancellationRequestedが処理されないのですか?
なぜ私のTryキャッチブロックはそれを処理しませんか?どのように私のビュー内の "キャンセル"ボタンからそのタスクを停止することができますか?
namespace LauncherWPF.ViewModel
{
/// <summary>
/// This class contLineageViewModel ains properties that a View can data bind to.
/// </summary>
public class : ViewModelBase
{
private CancellationTokenSource _tokenSource;
private CancellationToken _cancellationToken;
/// <summary>
/// Initializes a new instance of the LineageViewModel class.
/// </summary>
public LineageViewModel()
{
}
public void Start()
{
_tokenSource = new CancellationTokenSource();
_cancellationToken = _tokenSource.Token;
Debug.Write("TaskStarted");
try
{
Task.Run(() =>
{
for (var i = 0; i < 100; ++i)
{
_cancellationToken.ThrowIfCancellationRequested();
Debug.Write("Progress " + i);
for (var j = 0; j < 100; ++j)
{
Debug.Write("Updated " + j);
Thread.Sleep(50);
}
}
}, _cancellationToken);
}
catch (OperationCanceledException e)
{
Debug.Write("Canceled");
}
}
public void Cancel()
{
//not working
_tokenSource.Cancel();
}
}
}
はhttps://stackoverflow.com/questions/28629405/exception-in-async-methods-is-not-caught –
申し訳ありませんが、私は私の問題とは知らなかったも参照してください。非同期タスクに関連していたので、適切な用語で検索することができませんでした...だから、私はこの質問を作成しました。気をつけて投票してください... – exSnake