C# 控制台.写线(“);卡住

C# 控制台.写线(“);卡住,c#,visual-studio-2017,C#,Visual Studio 2017,有时,当我执行上述语句时,程序在控制台应用程序中冻结。如果我断了,我就无法移动到下一行。我需要重置缓冲区还是什么 它是一个批处理应用程序,可在屏幕上显示消息。是否有人经历过这种情况并设法解决了它。这似乎是一件新鲜事。我正在使用Visual Studio 2017 Prof.edition WriteLine暂停的功能如下所示。sMessage的值为空“” 它也碰巧是,甚至有时当我调试代码时,它也没有启动(只是冻结)。有时我需要停止执行并重新调试代码。我删除了visual studio并重新安装,

有时,当我执行上述语句时,程序在控制台应用程序中冻结。如果我断了,我就无法移动到下一行。我需要重置缓冲区还是什么

它是一个批处理应用程序,可在屏幕上显示消息。是否有人经历过这种情况并设法解决了它。这似乎是一件新鲜事。我正在使用Visual Studio 2017 Prof.edition

WriteLine
暂停的功能如下所示。
sMessage
的值为空“”


它也碰巧是,甚至有时当我调试代码时,它也没有启动(只是冻结)。有时我需要停止执行并重新调试代码。我删除了visual studio并重新安装,现在一切正常。我建议您也这样做。

可能导致这种情况的一个原因是,如果您单击控制台窗口,它会开始选择文本,换句话说,这是从控制台窗口复制文本的第一步。发生这种情况时,对控制台窗口的写入将挂起,直到您返回控制台窗口并按Enter键删除选择框。

使用
System.Threading.Tasks.Dataflow
nuget软件包,当用户在控制台窗口上选择文本时,您可以使用缓冲区帮助不锁定应用程序

    private static BufferBlock<string> _buffer = new BufferBlock<string>();
    private static Task _consumer;
    private static CancellationTokenSource _cts;

    public static void Main(string[] args)
    {
        _buffer = new BufferBlock<string>();
        _cts = new CancellationTokenSource();
        _consumer = ConsumeAsync(_buffer, _cts.Token);

        for (int i = 0; i < 100000; i++)
        {
            WriteToConsole(i.ToString());
        }

        Console.ReadLine();
    }

    private static void WriteToConsole(string message)
    {
        SendToBuffer(_buffer, message);
    }

    private static void SendToBuffer(ITargetBlock<string> target, string message)
    {
        target.Post(message);
    }

    private static async Task ConsumeAsync(IReceivableSourceBlock<string> source, CancellationToken cancellationToken)
    {
        while (await source.OutputAvailableAsync(cancellationToken))
        {
            var message = await source.ReceiveAsync();

            Console.WriteLine(message);
        }
    }
private static BufferBlock_buffer=new BufferBlock();
私有静态任务_消费者;
私有静态取消令牌源;
公共静态void Main(字符串[]args)
{
_buffer=新的BufferBlock();
_cts=新的CancellationTokenSource();
_consumer=consumerasync(_buffer,_cts.Token);
对于(int i=0;i<100000;i++)
{
WriteToConsole(i.ToString());
}
Console.ReadLine();
}
私有静态void writeConsole(字符串消息)
{
SendToBuffer(_缓冲区,消息);
}
私有静态void SendToBuffer(ITargetBlock目标,字符串消息)
{
target.Post(消息);
}
专用静态异步任务ConsumeSync(IReceivableSourceBlock源,CancellationToken CancellationToken)
{
while(等待source.OutputAvailableAsync(cancellationToken))
{
var message=await source.ReceiveAsync();
控制台写入线(消息);
}
}

这意味着写入控制台根本不会阻塞,所以在很多情况下它可能没有用处。在我的例子中,我只需要吐出日志信息

您没有显示任何代码,因此无法提供帮助。这绝不是偶然的:?不,不是那个问题,这是一个正在用C语言开发的控制台应用程序,在Visual Studio 2017中调试。它在标题的行上暂停。
不是正确的:P jk但无代码=无帮助,因为正常的writeline不会暂停application@EpicKip引用是因为这就是为什么如此呈现标题!您没有oFptr的
,您确定代码中的某个地方有这样的对象,并且您的程序没有卡在oFptr的
上吗?你试过分步调试吗?真遗憾,我希望这是某种缓冲问题,我可以刷新或做类似的事情。也许有另一种方法可以像你说的那样解决这个问题,但我发现重新安装visual Studio更容易这正是我的问题所在。讨论包含一个禁用文本选择和防止此类挂起的方法。遇到了相同的问题。这对我来说很奇怪。知道为什么吗?托尼,我知道这是个老问题,今天又发生了。我记得我的问题,并注意到它不会移动,说了一些关于线程。我的屏幕上没有选择文本的内容,所以我一直按enter键,选择和取消选择文本,最终它做出了响应。
    private static BufferBlock<string> _buffer = new BufferBlock<string>();
    private static Task _consumer;
    private static CancellationTokenSource _cts;

    public static void Main(string[] args)
    {
        _buffer = new BufferBlock<string>();
        _cts = new CancellationTokenSource();
        _consumer = ConsumeAsync(_buffer, _cts.Token);

        for (int i = 0; i < 100000; i++)
        {
            WriteToConsole(i.ToString());
        }

        Console.ReadLine();
    }

    private static void WriteToConsole(string message)
    {
        SendToBuffer(_buffer, message);
    }

    private static void SendToBuffer(ITargetBlock<string> target, string message)
    {
        target.Post(message);
    }

    private static async Task ConsumeAsync(IReceivableSourceBlock<string> source, CancellationToken cancellationToken)
    {
        while (await source.OutputAvailableAsync(cancellationToken))
        {
            var message = await source.ReceiveAsync();

            Console.WriteLine(message);
        }
    }