왜 다선정 인터페이스를 사용하여 가사를 했습니까?

2900 단어 C# 언어
왜 다선정 인터페이스를 사용하여 가사를 했습니까?
여기에 두 개의 항목을 붙인다.
먼저 부정확한 다선정을 붙이다
설계는 다음과 같습니다.
네임스페이스 도입:
using System.Threading;

전체 코드:
namespace ThreadTest1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_Start_Click(object sender, EventArgs e)
        {
            Thread myThread = new Thread(ThreadStart);
            myThread.IsBackground = true;   //       
            myThread.Start();
        }

        ///ThreadStart  
        private delegate void ThreadStartDelegate();
        /// 
        ///         
        /// 
        private void ThreadStart()
        {
            if (txt_Text.InvokeRequired)
            {
                ThreadStartDelegate d = ThreadStart;
                txt_Text.Invoke(d);
            }
            while (true)
            {
                Thread.Sleep(100);
                txt_Text.Text += "a";
                //      ,                    blog      
                Application.DoEvents();
            }
        }

        private void btn_Exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

상기 코드를 생각해 보세요. 라인이 호출된 후에 이 라인은 ThreadStart 안에서 계속 달릴 것입니다. 이 방법은 완전히 실행되지 않았습니다. (인터페이스가 업데이트되지 않을 뿐만 아니라) 그러나 가사에 도달했습니다.
인터페이스에서 가사하지 않고 다선정 목적을 달성하기 위해이 ThreadStart 방법을 전문적으로 조작해서 이 방법이 끊임없이 실행되도록 해야 한다.
다음은 올바른 코드 차이점입니다.
설계는 다음과 같습니다.
네임스페이스 도입:
using System.Threading;

전체 코드:
namespace ThreadTest2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_Start_Click(object sender, EventArgs e)
        {
            Thread myThread = new Thread(ThreadMethod);
            myThread.IsBackground = true;
            myThread.Start();
        }

        /// 
        ///          
        /// 
        private void ThreadMethod()
        {
            while (true)
            {
                Thread.Sleep(100);  //    100  
                ThreadStart();
            }
        }

        private delegate void ThreadStartDelegate();
        /// 
        ///     
        /// 
        private void ThreadStart()
        {
            if (txt_Text.InvokeRequired)
            {
                ThreadStartDelegate d = ThreadStart;
                txt_Text.Invoke(d);
            }
            else
            {
                txt_Text.Text += "a";
            }
        }

        private void btn_Exit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

이 사용 방법은 정확하다. 가장 큰 차이점은 ThreadStart를 한 번에 완전하게 실행할 수 있다는 것이다.그 안에 머물러 있는 게 아니라인터페이스의 리셋 작용에 도달할 수 있다.

좋은 웹페이지 즐겨찾기