如何在主线程中调用方法并终止另一个线程?

时间:2019-04-26 11:47:10

标签: c# multithreading

所以我正在启动一个对列表进行排序的线程,完成后应该在我的控制器中调用'completedSorting()'方法。现在,我担心仅调用该方法将导致该方法在另一个线程中执行。我相当擅长C#,但是线程对我来说是个新概念。

我只是返回线程,但是当我一次运行多个排序时,这只会导致我误以为是conconson,因此我希望他们调用“ completedSorting”方法

控制器:

        public void StartAlgorithm(Algorithm algorithm)
        {
            // check listOfArrays
            if (listManager.arrayList.Count == 0)
            {       
                int[] newArray = CreateArray(algorithm.currentListLength);
                listManager.arrayList.Add(newArray);
                listManager.currentBiggestList = newArray.Length;
                Thread thread = new Thread(() => algorithm.SolveAlgorithm(newArray, algorithm));
                thread.Start();

气泡排序:

        public override void SolveAlgorithm(int[] arr, Algorithm algorithm)
        {
            int temp = 0;

            for (int write = 0; write < arr.Length; write++)
            {
                for (int sort = 0; sort < arr.Length - 1; sort++)
                {
                    if (arr[sort] > arr[sort + 1])
                    {
                        temp = arr[sort + 1];
                        arr[sort + 1] = arr[sort];
                        arr[sort] = temp;
                    }
                }
            }
            CompletedAlgorithmLog newlog = new CompletedAlgorithmLog(filteredArray, algorithm);
            this.controller.OnCompletedArray(newlog);

最后一行是我需要更改一些代码的位置,我想我会在做完诸如mainthread => completedSorting之类的操作后返回,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

使用Task Parallel库并使用Task Continuation

System.Threading.Tasks.Task
.Run(() => 
{
    StartAlgorithm(algorithm);
})
.ContinueWith(()=>{

  CompletedAlgorithmLog newlog = new CompletedAlgorithmLog(filteredArray, algorithm);
            this.controller.OnCompletedArray(newlog);

});

它将在与线程池不同的线程上运行agorithm,一旦完成将在continueWith中执行代码。