private async void FeedLoop(List <CommentData.PostData> posts) { StringBuilder extractedLink = new StringBuilder(); TB_Progress.Text = "작업중..."; int failCount = 0; await Dispatcher.Invoke(async() => { for (int i = 0; i < posts.Count; i++) { if (isClosed) { break; } var post = posts[i]; if (CB_Target.SelectedIndex == 1 && !post.permission.Equals("A")) { continue; } else if (CB_Target.SelectedIndex == 2 && !post.permission.Equals("F")) { continue; } else if (CB_Target.SelectedIndex == 3 && !post.permission.Equals("P")) { continue; } else if (CB_Target.SelectedIndex == 4 && !post.permission.Equals("M")) { continue; } else if (CB_Target.SelectedIndex == 5 && !post.bookmarked) { continue; } if (CB_Task.SelectedIndex == 0) { try { await ChangePostRange(post); } catch (Exception) { failCount++; } await Task.Delay(100); } if (CB_Task.SelectedIndex == 1) { extractedLink.Append(post.permalink); extractedLink.Append("\n"); } if (CB_Task.SelectedIndex == 2) { try { if (CB_Target.SelectedIndex == 5) { await KakaoRequestClass.PinPost(post.id, true); } else { await KakaoRequestClass.PinPost(post.id, false); } } catch (Exception) { failCount++; } await Task.Delay(100); } TB_Progress.Text = $"작업중... ({i}/{posts.Count})"; PB_Main.Value = (double)i / posts.Count * 100.0; } if (!isClosed) { Dispatcher.Invoke(() => { if (extractedLink.Length > 0) { Clipboard.SetDataObject(extractedLink.ToString()); MessageBox.Show("링크 추출 완료\n추출된 링크는 클립보드에 복사되었습니다. Ctrl+V를 사용하여 붙여넣기하세요.", "안내"); } else { MessageBox.Show($"작업 완료.\n작업에 실패한 게시글 수 : {failCount.ToString()}\n(제한된 게시글과 같은 이유로 작업에 실패하는 경우가 있습니다)", "안내"); } SP_Progress.Visibility = Visibility.Collapsed; Close(); }); } }); }