주 폼에 Listbox가 있습니다. 두 번째 스레드에서 listbox에 액세스 할 수있는 메서드를 호출하고 싶습니다. 코드 :winforms의 비동기 메서드가 작동하지 않습니다.
.........
SecThreadOp sc;
.........
sc = new SecThreadOp(this.listBox1);
.........
private void button1_Click(object sender, EventArgs e)
{
sc.thr1.Start();
}
응용 프로그램은 클릭 버튼 후 중단,하지만 난 목록 상자 비동기에서 '시험'을 표시하려면 :
class SecThreadOp
{
public Thread thr1;
private ListBox listb1= new ListBox();
public SecThreadOp(ListBox lb)
{
thr1 = new Thread(write);
listb1 = lb;
}
public void write()
{
if (listb1.InvokeRequired)
{
listb1.Invoke(new Action(write));
}
else
{
for (int i = 0; i < 20; i++)
{
listb1.Items.Add("testing");
Thread.Sleep(2000);
}
}
}
}
및 주요 형태로는 내가 도착했습니다.
감사합니다.
어떤 오류가 발생합니까? – wondra
errros가 없으므로 버튼을 클릭하면 응용 프로그램이 일시 중지됩니다. –
@ user3197850 else 블록은 UI 스레드에서 실행됩니다. 스레드에서 먼저 계산 (Thread.Sleeps)을 수행 한 다음 끝에 * write *를 호출하십시오. –