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

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


我只想返回线程,但是当我一次运行多个排序时,这只会导致混淆我 reccon,因此我希望他们调用“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 之类的操作后返回,但我不知道具体如何操作。


泛舟湖上清波郎朗
浏览 68回答 1
1回答

慕容森

使用 Task Parallel 库并使用 Task ContinuationSystem.Threading.Tasks.Task.Run(() =>&nbsp;{&nbsp; &nbsp; StartAlgorithm(algorithm);}).ContinueWith(()=>{&nbsp; CompletedAlgorithmLog newlog = new CompletedAlgorithmLog(filteredArray, algorithm);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.controller.OnCompletedArray(newlog);});它将在与线程池不同的线程上运行算法,一旦完成,将在 continueWith 中执行代码。
打开App,查看更多内容
随时随地看视频慕课网APP