【发布时间】:2018-01-25 08:51:59
【问题描述】:
您好,我正在尝试为我的控制台应用程序控制台输出创建线程系统。
我就是这样做的 KonsolStream。
public class KonsolStream
{
ManualResetEvent _pauseEvent = new ManualResetEvent(true);
ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
Thread _thread;
private string _yazi;
private int _tip;
public int _Tip
{
get => _tip;
set => _tip = value;
}
public string _Yazi
{
get => _yazi;
set => _yazi = value;
}
public void KonsolaYaz()
{
switch (_Tip)
{
case 1:
//uyarı
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(_Yazi);
Console.ResetColor();
IstemciDurdur();
break;
case 2:
//başarı
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(_Yazi);
Console.ResetColor();
IstemciDurdur();
break;
case 3:
//log
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine(_Yazi);
Console.ResetColor();
IstemciDurdur();
break;
default:
IstemciDurdur();
break;
}
}
private void IstemciDurdur()
{
_pauseEvent.Reset();
}
public void Start()
{
_thread = new Thread(DoWork);
_thread.Start();
}
public void Resume()
{
_pauseEvent.Set();
}
public void DoWork()
{
while (true)
{
_pauseEvent.WaitOne(Timeout.Infinite);
if (_shutdownEvent.WaitOne(0))
break;
KonsolaYaz();
}
}
}
public class KonsolMesaji : KonsolStream
{
public KonsolMesaji(string yazi,int tip)
{
_Yazi = yazi;
_Tip = tip;
}
public void Yaz()
{
Start();
}
}
问题是当我启动 SistemBaslat() 消息不是同步的。 有时它从写消息开始。有时它从再次开始 我想让 KonsolStream 像,当我想向控制台写入一些输出时,我稍后会使用这个流。
【问题讨论】:
-
欢迎来到多线程的世界。您的消息按照线程执行的顺序写入控制台 - 只是因为您的代码在 SistemBaslat 方法中看起来是线性的,您正在创建线程,一旦您启动线程,您就无法控制各个线程将写入的顺序到控制台。
标签: c# .net multithreading stream console