我有一个循环的程序, 并希望在不破坏或暂停程序的情况下允许实时人工交互。
我希望能够将输入用作已经运行的程序的命令。
基本上,如果我没有正确解释它:
- 主程序在前台运行。
-secondary无限循环寻找输入在后台运行
-upon输入并点击返回键(ReadLine),保存字符串并发送到另一个函数(例如Interpreter())
- 我已经设置了所有内容来读取返回的输入(一个简单的循环),我只是无法理解如何在任何时候允许用户输入。
编辑: 我知道堆栈溢出通常是为了帮助解决代码中的错误,但我知道它应该很简单,我只是不明白从哪里开始。
编辑2:
using System;
using System.Threading;
using SteamKit2;
using SteamTrade;
using System.Collections.Generic;
using System.Text;
namespace SteamBot
{
public class Program
{
public static void Main(string[] EventArgs)
{
LicenseGlobal.Seal.Initialize("MY LICENSE KEY *please ignore this*");
if (System.IO.File.Exists("settings.json"))
{
Configuration config = Configuration.LoadConfiguration("settings.json");
Log mainLog = new Log(config.MainLog, null);
foreach (Configuration.BotInfo info in config.Bots)
{
mainLog.Info("Launching Bot " + info.DisplayName + "...");
new Thread(() =>
{
int crashes = 0;
while (crashes < 1000)
{
try
{
new Bot(info, config.ApiKey, (Bot bot, SteamID sid) =>
{
return (SteamBot.UserHandler)System.Activator.CreateInstance(Type.GetType(bot.BotControlClass), new object[] {
bot,
sid
});
}, false);
}
catch (Exception e)
{
mainLog.Error("Error With Bot: " + e);
crashes++;
}
}
}).Start();
Thread.Sleep(5000);
}
}
else
{
Console.WriteLine("Configuration File Does not exist. Please rename 'settings-template.json' to 'settings.json' and modify the settings to match your environment");
}
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
答案 0 :(得分:3)
您的主线程应该是等待用户输入的线程。 像这样:
using System;
using System.Threading;
namespace Input
{
class MainClass
{
public static void Main (string[] args)
{
// This is to stop the worker thread
var workerShouldStop = false;
var worker = new Thread(() =>
{
// do work
while (!workerShouldStop) {
Thread.Sleep(1000);
Console.WriteLine("doing things ...");
};
});
worker.Start();
string input;
do
{
Console.Write ("Your input (enter to quit):");
input = Console.ReadLine();
Console.WriteLine("input is:" + input);
} while(!String.IsNullOrWhiteSpace(input));
// Stop the worker thread
workerShouldStop = true;
}
}
}