繁体   English   中英

从线程返回元素

[英]Return element from Thread

我试图从线程返回元素。 我已经编写了这段代码来做到这一点。 但是我的代码有时可以正常工作,但有时不能正常工作。 请帮助我了解这段代码有什么问题。 我正在C#中学习多线程

正确的结果CorrectResultImage

不正确正确结果图像

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Thread_CallBack_Method
{
    public delegate int CallBackDelegate(int sumofNumbers);

    class Program
    {
        public static int Sum(int sum)
        {
            return sum;
        }

        static void Main(string[] args)
        {
            CallBackDelegate callback = new CallBackDelegate(Sum);
            Numbers numbers = new Numbers(3, callback);
            Thread t1 = new Thread(numbers.sumOfNumbers);
            t1.Start();
            Console.WriteLine("Sum of elements = {0} ",numbers.returnElementFromThread());
            Console.ReadKey();
        }
    }

    class Numbers
    {
        int _number;
        CallBackDelegate _callBack;

        public Numbers(int number, CallBackDelegate callback)
        {
            this._number = number;
            this._callBack = callback;
        }

        int threadElement;
        public void sumOfNumbers()
        {
            int sum = 0;
            for (int i = 1; i <= _number; i++)
            {
                sum = sum + i;
            }

            if (_callBack != null)
                threadElement = _callBack(sum);
        }

        public int returnElementFromThread()
        {
            return threadElement;
        }
    }
}

因为线程在将结果打印到控制台之前或之后都已完成。 如果仍然要等待结果,为什么要麻烦使用另一个线程?

仅当您要同时执行操作或使UI保持响应状态以使用户不会感到沮丧时,使用线程才有用。 您所拥有的是简单的代码串行执行...在这里不需要使用线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM