【问题标题】:How can i do constant check on c#? [closed]如何对 c# 进行持续检查? [关闭]
【发布时间】:2016-04-27 21:09:15
【问题描述】:

我是一名 C# 初学者,我需要帮助才能对 Windows 窗体应用程序进行持续检查。 我做了这段代码,但我不知道我可以将它粘贴到哪里。

while(true)
{
    if(checkconn == true)
    {
        labelcheck.Text = "Connected";
    }
    else
    {
        labelcheck.Text = "Not Connected";
    }
}

我已经试穿了:

private void loginform_Load(object sender, EventArgs e)
{
}

和:

public loginform()
{
    InitializeComponent();            
}

但在这两种情况下,应用程序都不会运行,因为它在无限循环中运行。

【问题讨论】:

  • 如果标签可用,请尝试文本更改事件。这将为您节省 CPU 周期,无需循环,但事件处理程序将完成这项工作。
  • 我添加了计时器,但它给我带来了问题。我无法点击任何按钮
  • 您可能无法使用您的 UI(单击按钮),因为您正在 UI 线程上运行检查。尝试在单独的线程或backgroundworker 上运行检查。您可以使用委托从单独的线程操作您的 UI。
  • 谢谢各位。我会努力的
  • 最好注册到连接状态改变时触发的相关事件,并在该事件触发时执行操作。

标签: c# windows forms


【解决方案1】:
readonly BackgroundWorker _worker = new BackgroundWorker();

public loginform()
{
    InitializeComponent();
    _worker.DoWork += worker_DoWork;
    _worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    _worker.RunWorkerAsync();
}

private static void worker_DoWork(object sender, DoWorkEventArgs e)
{
    Thread.Sleep(1000);
    e.Result = checkconn == true ? "Connected" : "Not Connected";
}

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    label.Text = e.Result as string;
    _worker.RunWorkerAsync(); // loops endlessly
}

【讨论】:

  • 谢谢!效果很好!
【解决方案2】:

总结发布的 cmets - 如果您能够负担得起每隔一段时间(而不是一直)检查并且您不打算在期间进行大量处理,那么在您的表单中使用计时器是值得的支票。问题是,如果您计划进行大量处理,您将无法使用 UI 作为 UI 正在运行的当前线程,正在用于执行检查的处理。如果是这种情况,那么正如@Ernest 建议的那样,值得在单独的线程上执行检查。通过这种方式,您可以使用与您已有的代码类似的代码(但位于BackgroundWorkerDoWork 块内)不断检查。 例如:

private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    while(true)
    {
        if(checkconn == true)
        {
            labelcheck.Text = "Connected";
        }
        else
        {
            labelcheck.Text = "Not Connected";
        }
    }
}

【讨论】:

  • 我已经尝试过了,但什么也没发生。
  • 您需要将命令发送给BackgroundWorker 才能开始工作。
猜你喜欢
  • 2022-01-22
  • 2019-11-21
  • 2020-05-03
  • 1970-01-01
  • 2014-08-13
  • 2018-02-16
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多