【问题标题】:How do I access a task form program.cs in form1.cs如何访问 form1.cs 中的任务表单 program.cs
【发布时间】:2019-03-20 03:22:15
【问题描述】:

所以我正在尝试访问表单 1.cs 中的任务表单 program.cs,但我找不到在任何地方都可以使用的方法。这是我想要的一个例子: program.cs

private async void ConsoleSendMessage()
{
    Console.WriteLine("Select the guild:");
    var guild = GetSelectedGuild(_client.Guilds);
    var textChannel = GetSelectedTextChannel(guild.TextChannels);
    var msg = string.Empty;
    while (msg.Trim() == string.Empty)
    {
        Console.WriteLine("Your message:");
        msg = Console.ReadLine();
    }

    await textChannel.SendMessageAsync(msg);
}

然后我希望能够在form1.cs 中运行该任务

【问题讨论】:

  • 这个方法是async void,这是一个非常糟糕的主意。这意味着您不会等待代码完成,并且此代码引发的任何错误都不会返回到调用代码,这意味着您不会知道它没有正确执行。除非您在少数情况下(例如框架事件处理程序),否则不要使用async void。使用async Task
  • discord.net 必须是这样才能正常工作
  • 不,不是。你为什么这么认为?
  • 好吧,现在是private void ConsoleInput(),但我仍然不知道如何从program.cs 访问所有任务/功能
  • 你不能,如果方法是私有的。 Private 的意思是“只有这个类可以看到它”。你应该了解access modifiers

标签: c# .net discord.net


【解决方案1】:

向 Program 类添加方法通常不是一个好主意。这个类只是应该启动程序。

您应该将您的方法存储在另一个类中。但是,如果您真的想保留 Program.cs 文件,请将其设为 public 和 static。替换:

private async void ConsoleSendMessage()

public static async void ConsoleSendMessage()

并像这样使用它:

Program.ConsoleSendMessage();

在您的 form1.cs 文件中。

【讨论】:

  • 您完全忽略了这是一个async void 方法这一事实。
  • 他的问题是关于他的方法的可访问性,而不是关于它是否正确。
  • 不,问题不在于可访问性。这是关于使代码正确工作。而async void 在这种情况下是不合适的,你的回答应该包括解决这样的问题,而不是完全避免它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2020-12-27
相关资源
最近更新 更多