■ Task<T> 클래스 : Run 정적 메소드 사용하기

----------------------------------------------------------------------------------------------------


TestProject.zip


MainForm.cs

 

 

using System;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            this.testButton.Click += testButton_Click;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 테스트 버튼 클릭시 처리하기 - testButton_Click(sender, e)

 

        /// <summary>

        /// 테스트 버튼 클릭시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void testButton_Click(object sender, EventArgs e)

        {

            this.testButton.Enabled = false;

 

            this.resultTextBox.Text = string.Empty;

 

            ProcessTest();

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 테스트 처리하기 - ProcessTest()

 

        /// <summary>

        /// 테스트 처리하기

        /// </summary>

        private async void ProcessTest()

        {

            Task<string> task = Task<string>.Run(() =>

            {

                for(int i = 0; i < 101; i++)

                {

                    System.Threading.Thread.Sleep(10);

 

                    Invoke(new MethodInvoker(() =>

                    {

                        this.progressBar.Value = i;

 

                        this.progressBar.Update();

                    }));

                }

 

                return DateTime.Now.Millisecond.ToString();

            });

 

            string result = await task;

 

            this.resultTextBox.Text = result;

 

            this.testButton.Enabled = true;

        }

 

        #endregion

    }

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker