関数に canceltoken を渡す際に問題が発生しました。InvalidOperationException 、「別のスレッドに属しているため、呼び出しスレッドはオブジェクトへのアクセス許可を取得できません」を取得します。
これが私のコードです。
private CancellationTokenSource cts;
private CancellationToken ct;
public MainWindow()
{
InitializeComponent();
client = new WebClient();
cts = new CancellationTokenSource();
ct = cts.Token;
}
private void one_Click(object sender, RoutedEventArgs e)
{
cts = new CancellationTokenSource();
ct = cts.Token;
Task myTask = Task.Run(() => Save(textBox.Text, ct));
}
private void Save(string url, CancellationToken ct)
{
//var url = ThirdAddressTextBox.Text;
var html = client.DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(html);
var imageNodesList =
doc.DocumentNode.SelectNodes("//img")
.Where(
x =>
x.Name == "img")
.Select(x => x)
.ToList();
int temp= 0;
foreach (var htmlNode in imageNodesList)
{
if (ct.IsCancellationRequested)
{
return;
}
client.DownloadFile(new Uri(htmlNode.Attributes["src"].Value), @"C:\Users\" + temp+ ".jpg");
++licznik;
}
client.DownloadFile(new Uri(url), @"C:\Users\");
return;
}
このエラーでこの問題を解決する方法を知っている人はいますか?