我的主要表单Form1运行了程序的大部分。

我有一个单独的线程开始执行算法。

当我从新线程运行方法MyAlgorithm()时,出现错误



如何返回到原始线程,以便可以运行该方法以使用最新值更新文本框?

这是我要运行的方法,该方法包含在Form1(应用程序的主类)中。

// Reset the results values
public void ShowResults()
{
    while (true)
    {

        loopsNum.Text = Convert.ToString(resultLoopsNum);
        nodesVisitedNum.Text = Convert.ToString(resultNodesVisitedNum);
        nodesResolvedNum.Text = Convert.ToString(resultNodesResolvedNum);
        cpuLoopsNum.Text = Convert.ToString(resultCpuLoopsNum);
        shortestPathCostNum.Text = Convert.ToString(resultShortestPathCost);

    }
}

我已经看过Invoke()方法,但是我不知道如何从线程方法中获取Form1的原始实例。

我正在像这样调用我的线程...
        // Set the algorithm method up in it's own thread
        Thread thread = new Thread(new ThreadStart(MyAlgorithm));

        // Run the algorithm
        thread.Start();

最佳答案

看看Control.Invoke():

public void ShowResults()
{
  while (true)
  {
    Thread.Sleep(1000); // don't spam the UI thread

    if (this.InvokeRequired)
    {
      this.Invoke((Action)UpdateGui);
    }
    else
    {
      UpdateGui();
    }
  }
}

private void UpdateGui()
{
  loopsNum.Text = Convert.ToString(resultLoopsNum);
  nodesVisitedNum.Text = Convert.ToString(resultNodesVisitedNum);
  nodesResolvedNum.Text = Convert.ToString(resultNodesResolvedNum);
  cpuLoopsNum.Text = Convert.ToString(resultCpuLoopsNum);
  shortestPathCostNum.Text = Convert.ToString(resultShortestPathCost);
}

10-06 05:47
查看更多