2014-01-20 1 views
1

в приложении Windows, я хочу, чтобы появилась консоль, которая могла или не могла отображать данные из самого приложения, но также может использоваться для ввода в дополнительной информации, или изменений значений без необходимости самого приложения (это 50% утилита 50% отладка)Приложение Windows C# (winform), как отображать консоль на разных потоках, и закрывать отдельно

теперь некоторые из вопросов, которые я прибыл в

  • закрывая консоль закрывает приложение
  • , если консоль запущена ING-то (в ожидание подсказки) окно не может запустить
  • же для оконных работают, если его работа консоль не может запустить

здесь является немного коды работы с консолью

namespace Kproject 
{ 

public partial class KGUI : Form 
{ 
    public KGUI() 
    { 
     InitializeComponent(); 
    } 


    [DllImport("kernel32.dll", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool AllocConsole(); 

    private void Form_Keypress(object sender, KeyPressEventArgs e) 
    { 
     switch (e.KeyChar) 
     { 
      case 'c': 
       AllocConsole(); 
       ConsoleCode(); 
       break; 
      case 'b': 
       Console.Beep(2000, 100); 
       break; 
      case 'v': 
       string s = Console.ReadLine(); 
       Console.WriteLine(s); 
       break; 
      default: 
       Console.Beep(6000, 50); 
       break; 
     } 
    } 
    private void ConsoleCode() 
    { 
     string s = ""; 
     while(s != "exit"){ 
      s = Console.ReadLine(); 
      switch (s) 
      { 
       case "c1": 
        /* 
        * do task 
        */ 
        break; 
       case "c2": 
        /* 
        * do task 
        */ 
        break; 
       case "c3": 
        /* 
        * do task 
        */ 
        break; 
       default: 
        Console.Beep(100, 300); 
        break; 
      } 
     } 
    } 
} 

Включение c приведет к поднимет консоль и заблокирует использование приложения до тех пор, пока не будет напечатан выход, поэтому я хотел бы просто сидеть тихо в спине, пока он не понадобится, или для его закрытия, без необходимости закрывать вся программа

Как я могу запустить консоль без ее противоречия с приложением и решить проблемы, отмеченные ранее.

+0

Хорошо, вы забыли задать вопрос, хотя ... – tnw

+0

и теперь он имеет один. – Kaylee

+2

Возможно, вам гораздо лучше не использовать настоящую консоль, а создать новую форму, на которой есть только текстовое поле (возможно, одно для отображения вывода и одно для ввода), которое вы используете вместо консоли. – Servy

ответ

-3

// Глобальная переменная Тема StartThread = новая тема (новый ThreadStart (loadThread)); // Вызов метода, где вы хотите, чтобы нить начала ...

// Добавить, где вы хотите начать поток ... StartThread.Start();

// Закрыть Thread StartThread.Abort();

+1

Это не сработает. Кроме того, вам следует избегать использования «Abort», как чумы, и использовать его только в том случае, если вы действительно абсолютно должны *. Это использование делает программы гораздо сложнее рассуждать. – Servy

+0

Я пробовал что-то похожее на это, не говоря уже о том, что вызов консоли в этом методе усугубил ситуацию, а не лучше. – Kaylee

Смежные вопросы