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; } }
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(); }