Console.Clear()停止方法执行(未达到IOException)

时间:2019-01-23 16:07:49

标签: c# ioexception windows-console

此方法的行为很奇怪:

    public T NavigateTo<T>() where T : Page
    {
        SetPage<T>();

        Console.Clear();
        CurrentPage.Display();

        return CurrentPage as T;
    }

发件人:https://github.com/uta-org/EasyConsole/blob/master/EasyConsole/Program.cs#L106

问题是当到达Console.Clear()时,我继续执行(按F10键),该作用域仅从方法中退出。

...

如您所见,一旦我按下F10(跳过)控制台,就会再次显示(这意味着断点执行已结束)。

为什么会这样?什么返回此方法?因为我期望有NullReferenceException

    public MainPage(Program program)
        : base("Main Page", program,
      new Option("Fork Syncing (complete process)", () => program.NavigateTo<ForkSyncing>().DoLinking = null),
      new Option("Fork Syncing (only cloning)", () => program.NavigateTo<ForkSyncing>().DoLinking = true),
      new Option("Fork Syncing (only linking)", () => program.NavigateTo<ForkSyncing>().DoLinking = false),
      new Option("Exit", () => Environment.Exit(0)))
    {
    }

发件人:https://github.com/uta-org/QuickFork/blob/eaf8f0a65af75e74015a1a1e168d98ad65d9e472/QuickFork.Shell/MainPage.cs#L21

我是按照README上作者的要求进行的。如您所见,我正在设置DoLinking属性,这不是Nullable。 (我遇到的错误是未分配DoLinking,因此我的工作流未按预期执行)。

我在Debug and Release版本上遇到了这个问题。我在.NET 4.6.1上。

编辑:

我没有意识到Intelisense IOException。但是我在“异常设置”窗口中将这个异常切换了:

...

@stimms的答案的建议代码:

...

但这更奇怪,即使抛出任何异常。

2 个答案:

答案 0 :(得分:1)

在某些情况下,console.clear将引发IOException。

我敢打赌,Console.Clear抛出了未被捕获的IOException。关于Console.Clear(https://docs.microsoft.com/en-us/dotnet/api/system.console.clear?view=netframework-4.7.2)的官方指南是,您应该在try / catch块中扭曲使用它。

public T NavigateTo<T>() where T : Page
{
    SetPage<T>();

    try{
      Console.Clear();
    }catch(IOException ex){
      //do something
    }
    CurrentPage.Display();

    return CurrentPage as T;
}

答案 1 :(得分:0)

尽管我收到了两次投票,但我仍然相信(而且,人们看到的是,我不理解)这是一个错误(因此,我在dotnet/roslyn repo上创建了一个问题)。

因此,为了解决该问题,我将LandlinePhoneLens类的CellPhoneLens变量更改为静态变量。

然后,我执行了以下操作:

//Create the arguments to the callable function.
        var data = new Dictionary<string, object>();
        data["text"] = "message";
        data["push"] = true;

        //Call the function and extract the operation from the result.
        var function = FirebaseFunctions.DefaultInstance.GetHttpsCallable("addMessage");
        function.CallAsync(data).ContinueWith((task) => {
            if (task.IsFaulted)
            {
                foreach (var inner in task.Exception.InnerExceptions)
                {
                    if (inner is FunctionsException)
                    {
                        Debug.Log(inner.Message);
                    }
                }
            }
            else
            {
                Debug.Log("Finished: " + task.Result.Data);
            }
        });

因此,如果我在致电DoLinking之前进行设置,就不会有此问题。