-1

Logitech G510 LCD キーボード用の小さなアプリケーションを作成していて、少し問題が発生しています。画面に描画した後、プログラムがアイドル状態になり、プロセスとしてアクティブな状態を維持したいのですが、コンピューターのリソースを消費することはありません。

ただし、特定のイベントが発生するたびにフォームを開く必要があります。それThread.Sleep()を行うための最良の方法ではないと思います。

私のコードは大まかに次のようになります。

int main(){
    InitLCD();
    DrawStuff();

    Wait();
}

void HandleEvent(){
    //Create a Form if none exists
}

//Must be called before exiting
void OnExit()
{
    CloseLCD();
}

イベントを処理する別のスレッドが解決策になる可能性がありますか? もしそうなら、どのように?

EDIT:// アプリケーションは非表示の WinForm アプリケーションです。つまり、開始時にフォームは作成されません。上記のイベントが発生した場合にのみ、実際のフォームが作成されます。

4

1 に答える 1

1

この方法でロジックを試してください:

public static class Program
    {
        private static AutoResetEvent waithandle = new AutoResetEvent(true);
        static void Main()
        {
            LCDClass lcd = new LCDClass();
            lcd.mid_event += LcdOnMidEvent;
            lcd.exit_event += LcdOnExitEvent;
            lcd.init();


            Thread thread = new Thread(lcd.DrawStuff);
            thread.Start(waithandle);
            waithandle.WaitOne();

        }

        private static void LcdOnExitEvent(object sendet, EventArgs eventArgs)
        {
            //lcd work finished
        }

        private static void LcdOnMidEvent(object sendet, EventArgs eventArgs)
        {
            // handle event, create form
            Application.Run(new MyForm());
        }

    }

    internal class LCDClass
    {
        private AutoResetEvent waithandle;
        internal delegate void MyEventHandler(object sendet, EventArgs e);

        internal event MyEventHandler mid_event;

        protected virtual void OnMidEvent(object sendet)
        {
            MyEventHandler handler = mid_event;
            if (handler != null) handler(sendet, EventArgs.Empty);
        }

        internal event MyEventHandler exit_event;

        protected virtual void OnExitEvent(object sendet)
        {
            MyEventHandler handler = exit_event;
            if (handler != null) handler(sendet, EventArgs.Empty);
        }

        public void init()
        {
        }

        public void DrawStuff(object state)
        {
            // do work here

            // raise event
            mid_event(this, null);

            //do more work

            // raise event
            exit_event(this, null);
            waithandle.Set();

        }

    }
于 2013-02-18T02:37:11.770 に答える