예제 #1
0
        private void WriteChar(int order, PosKey key)
        {
            if (order == KeyMap.LastOrder && KeyMap.LastPosKey == key)
            {
                canAdvance = false;
                sequence++;
            }
            else
            {
                canAdvance = true;
            }
            ThreadState tState = t.ThreadState;

            if (tState == ThreadState.Unstarted || tState == ThreadState.Stopped)
            {
                sequence = 0;
            }
            char c = KeyMap.GetLetter(key, order, ref sequence);

            switch (c)
            {
            case '\b':
                if (input.Length == 0)
                {
                    return;
                }
                if (DisplayAdapter.Cashier.CurrentColumn == 0)
                {
                    return;
                }
                if (t != null || t.ThreadState == ThreadState.WaitSleepJoin)
                {
                    if (t.ThreadState != ThreadState.Unstarted)
                    {
                        t.Interrupt();
                        t.Join();
                    }
                }
                if (input.Length >= DisplayAdapter.Cashier.CurrentColumn)
                {
                    input.Remove(DisplayAdapter.Cashier.CurrentColumn - 1, 1);
                }
                DisplayAdapter.Cashier.BackSpace();
                break;

            case ' ':
                Numeric(' ');
                break;

            case '\n':
                Enter();
                break;

            default:
                try
                {
                    if (tState == ThreadState.Unstarted)
                    {
                        Append(c, false);
                        t.Start();
                        return;
                    }
                    else if (tState == ThreadState.Stopped)
                    {
                        canAdvance = true;
                        sequence   = 0;
                        t          = new Thread(new ThreadStart(AdvanceCursor));
                        t.Start();
                        Append(c, false);
                        return;
                    }
                    else if (tState == ThreadState.WaitSleepJoin)
                    {
                        t.Interrupt();
                        t.Join();
                        t = new Thread(new ThreadStart(AdvanceCursor));
                        t.Start();
                        Append(c, false);
                    }
                }
                catch (ThreadStateException)
                {
                    //Console.WriteLine("Threadstate Exception");
                }
                break;
            }
        }
예제 #2
0
        private void WriteChar(int order, PosKey key)
        {
            if (order == KeyMap.LastOrder && KeyMap.LastPosKey == key)
            {
                sequence++;
            }

            if (threadCursor != null)
            {
                threadCursor.Abort();
            }

            char c = KeyMap.GetLetter(key, order, ref sequence);

            switch (c)
            {
            case '\b':
                if (IsTouchDisplay)
                {
                    return;
                }
                if (input.Length == 0)
                {
                    return;
                }
                if (DisplayAdapter.Cashier.CurrentColumn == 0)
                {
                    return;
                }

                if (input.Length >= DisplayAdapter.Cashier.CurrentColumn)
                {
                    input.Remove(DisplayAdapter.Cashier.CurrentColumn - 1, 1);
                }
                DisplayAdapter.Cashier.BackSpace();
                break;

            case ' ':
                if (IsTouchDisplay)
                {
                    return;
                }
                Numeric(' ');
                break;

            case '\n':
                if (IsTouchDisplay)
                {
                    return;
                }
                Enter();
                break;

            default:
                try
                {
                    Append(c, true);
                    return;
                }
                catch (ThreadStateException)
                {
                    //Console.WriteLine("Threadstate Exception");
                }
                break;
            }

            threadCursor = new Thread(new ThreadStart(AdvanceCursor));
            threadCursor.Start();
        }