เมื่องานอะซิงโครนัสทำให้ UX ไม่ดี
ฉันกำลังเขียน COM add-in ที่ขยาย IDE ที่ต้องการอย่างยิ่ง มีคุณสมบัติหลายอย่างที่เกี่ยวข้อง แต่ให้แคบลงเป็น 2 เพื่อประโยชน์ของโพสต์นี้: มีเครื่องมือExplorer ในหน้าต่างที่แสดงมุมมองแบบต้นไม้ที่ช่วยให้ผู้ใช้นำทางโมดูลและสมาชิกของพวกเขา มีเครื่องมือตรวจสอบรหัสหน้าต่างที่แสดงDataGridviewที่ให้ผู้ใช้สำรวจปัญหารหัสและแก้ไขให้โดยอัตโนมัติ เครื่องมือทั้งสองมีปุ่ม "รีเฟรช" ที่เริ่มงานแบบอะซิงโครนัสที่แยกวิเคราะห์รหัสทั้งหมดในโครงการที่เปิดอยู่ทั้งหมด รหัส Explorer ที่ใช้ผลการแจงการสร้างTreeViewและรหัสการตรวจสอบการใช้ผลการแจงที่จะพบปัญหารหัสและแสดงผลลัพธ์ในของDataGridView สิ่งที่ฉันพยายามที่จะทำที่นี่คือการแบ่งปันผลแยกระหว่างคุณสมบัติเพื่อที่ว่าเมื่อรหัส Explorer ในการรีเฟรชแล้วรหัสการตรวจสอบรู้เกี่ยวกับมันและสามารถฟื้นฟูตัวเองได้โดยไม่ต้องทำซ้ำการทำงานแยกว่ารหัส Explorer ที่ก็ไม่ได้ . ดังนั้นสิ่งที่ฉันทำฉันทำให้ parser class เป็นผู้ให้บริการเหตุการณ์ที่คุณสมบัติสามารถลงทะเบียนได้ที่: private void _parser_ParseCompleted(object sender, ParseCompletedEventArgs e) { Control.Invoke((MethodInvoker) delegate { Control.SolutionTree.Nodes.Clear(); foreach (var result in e.ParseResults) { var node = new …