Netduinoボードを使用していますが、NativeEventHandler(ボタン)の終了に問題があります。問題は、join()関数でメインスレッドがスタックしていることです。実行後に子スレッドが解放されない理由がわかりません。
public class Program
{
private static Thread mainThread;
private static Thread childThread;
private static InterruptPort button = new InterruptPort(Pins.GPIO_PIN_D1, true, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeLevelHigh);
private static OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
public static void Main()
{
mainThread = Thread.CurrentThread;
Thread.Sleep(1000);
while (true)
{
Thread.Sleep(100);
button.OnInterrupt += new NativeEventHandler(ButtonEvent);
mainThread.Suspend();
childThread.Join();//It stuck here.
Thread.Sleep(100);
button.EnableInterrupt();
button.ClearInterrupt();
}
}
private static void ButtonEvent(uint port, uint state, DateTime time)
{
childThread = Thread.CurrentThread;
button.DisableInterrupt();
mainThread.Resume();
// Thread.CurrentThread.Abort(); this .Abort() seems doesn't terminate the thread either.
}
}