왜 다선정 인터페이스를 사용하여 가사를 했습니까?
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를 한 번에 완전하게 실행할 수 있다는 것이다.그 안에 머물러 있는 게 아니라인터페이스의 리셋 작용에 도달할 수 있다.