非同期タスクが悪いUXを作るとき
私は、必死にそれを必要とするIDEを拡張するCOMアドインを書いています。関係する機能はたくさんありますが、この投稿のために2つに絞ってみましょう。 ユーザーがモジュールとそのメンバーをナビゲートできるツリービューを表示するコードエクスプローラーツールウィンドウがあります。 ユーザーがコードの問題をナビゲートして自動的に修正できるようにするdatagridviewを表示するコードインスペクションツールウィンドウがあります。 どちらのツールにも、開いているすべてのプロジェクトのすべてのコードを解析する非同期タスクを開始する「更新」ボタンがあります。コードエクスプローラは、構築するために、解析結果を使用してツリービューをし、コード検査は、コードの問題を発見し、その中で結果を表示する解析結果を使用するDataGridView。 ここで私がやろうとしているのは、機能間で解析結果を共有することです。これにより、コードエクスプローラーが更新されたときに、コードインスペクションがそれを認識し、コードエクスプローラーが行った解析作業をやり直すことなく更新できるようになります。。 それで私がやったことは、パーサークラスを、機能が登録できるイベントプロバイダーにしたことです。 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 TreeNode(result.Project.Name); node.ImageKey = "Hourglass"; node.SelectedImageKey = node.ImageKey; AddProjectNodes(result, node); Control.SolutionTree.Nodes.Add(node); } Control.EnableRefresh(); }); } private void _parser_ParseStarted(object sender, ParseStartedEventArgs e) { Control.Invoke((MethodInvoker) delegate …