監視・常駐型のプログラムを作る際に、「秀丸上で何も更新や具体的な操作がないならば、何もする必要がない」といった プログラムを作ることは十分ありえるシチュエーションです。
このような目的のため、Hm.Edit.UpdateCount が利用できます。 これは秀丸マクロ変数の「updatecount」相当のものとなります。
マクロ中でもマクロ中以外でも、常時取得することが出来ます。
int Hm.Edit.UpdateCount
using System; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using HmNetCOM; namespace NET4COMServer { [Guid("BD55F2A6-9ED0-4F4F-9D37-E6B84BE63272")] public class NET4COMServer { // 静的コンストラクタ(static付きコンストラクタ)でコンソール表示を読んでおけば良い。 static NET4COMServer() { } // 非同期のメソッド static string HeavyMethod() { Thread.Sleep(1000); try { // このプロパティは秀丸9.12以上なので存在しないことが充分考えられる // アップデート値 int updatecount = Hm.Edit.UpdateCount; Hm.OutputPane.Output(updatecount.ToString() + "\r\n"); } catch (Exception e) { Hm.OutputPane.Output(e.Message + "\r\n"); } return "非同期関数"; } // 秀丸から呼び出すCOMのメソッド。COM呼び出しだとstaticを付けては駄目。 public string CalledFuncFromHidemaruMacro() { Task<string> task = Task.Run(() => { return HeavyMethod(); }); // awaitやTaskのResult待ちしないので、この関数自体は一瞬で抜けていく。 return "同期関数"; } } }
テキストを編集してみたり、メニュー上の操作をしてみたり、 操作をやめてマウスだけ動かしてみたりして、 updatecount がどのように更新されていくのか確認してみてください。