フォームのタイマーを使うことで、同期タイマーを使うことが出来ます。 同期するということは、並列処理ではないということです。
即ち、タイマーのTick処理の中で重い処理をすると、 秀丸が一瞬止まったかのようになってしまうということです。
一方同期タイマーは並列処理の落とし穴について考慮する必要がほとんど無いため、 取り扱いがしやすいというメリットがあります。
.NETのフォームアプリではタイマーが非常に頻繁に利用されますので、 フォームアプリケーションを制作したことがある人であれば、自然に受け入れられるでしょう。
フォームが破棄される際には、タイマーも止める処理入れておきましょう。
using System; using System.Windows.Forms; namespace HmTestClass06 { class MonitorForm : Form { Timer timer; public MonitorForm() { this.FormClosing += form_FormClosing; CreateTimer(); } private void CreateTimer() { timer = new Timer() { Interval = 1000 }; timer.Tick += timer_Tick; timer.Enabled = true; timer.Start(); } private void DeleteTimer() { if (timer != null) { timer.Stop(); timer = null; } } private void timer_Tick(object sender, EventArgs e) { System.Diagnostics.Trace.WriteLine("定期実行"); } private void form_FormClosing(object sender, FormClosingEventArgs e) { StopMonitor(); } private void StopMonitor() { try { DeleteTimer(); } catch (Exception e) { System.Diagnostics.Trace.WriteLine(e.Message); } } } public class Class6 { private static Form form; public static IntPtr CreateForm() { if (form == null || !form.Visible) { form = new MonitorForm(); } form.Show(); return (IntPtr)1; } private static void DestroyForm() { if (form != null) { form.Close(); form = null; } } public static IntPtr OnDetathMethod() { DestroyForm(); return (IntPtr)0; } } }
#HMNET = loaddll( hidemarudir + @"\hm.NET.dll" ); #r = dllfuncw( #HMNET, "SetDetachMethod", currentmacrodirectory + @"\HmTestClass06.dll", "HmTestClass06.Class6", "OnDetathMethod" ); #r = dllfuncw( #HMNET, "CallMethod", currentmacrodirectory + @"\HmTestClass06.dll", "HmTestClass06.Class6", "CreateForm" );
「定期実行」といった表示が、1秒に1回ずつデバッグモニターに表示されることを確認出来ることでしょう。