У меня есть форма с кнопкой и текстовым полем. Кнопка запускает поток, который обновляет значение текстового поля.Обновление темы GUI зависает в случайных моментах
public Form1()
{
InitializeComponent();
myDelegate = new UpdateUi(updateUi);
}
private void button1_Click(object sender, EventArgs e)
{
myThread = new Thread(new ThreadStart(ThreadFunction));
myThread.Start();
}
private void ThreadFunction()
{
MyThreadClass myThreadClassObject = new MyThreadClass(this);
myThreadClassObject.Run();
}
private void updateUi(int i)
{
textBox1.Text = i.ToString();
Thread.Sleep(1000);
}
public Thread myThread;
public delegate void UpdateUi(int i);
public UpdateUi myDelegate;
и ThreadClass:
public class MyThreadClass
{
Form1 myFormControl1;
public MyThreadClass(Form1 myForm)
{
myFormControl1 = myForm;
}
public void Run()
{
// Execute the specified delegate on the thread that owns
// 'myFormControl1' control's underlying window handle.
for(int i=0;i<100;i++)
{
if(myFormControl1.InvokeRequired)
{
myFormControl1.Invoke(myFormControl1.myDelegate,i);
}
}
}
}
Как Вы можете видеть, что нет ничего особенного в моем коде, но иногда заморозки кода.
например, это 1-> 2-> 3-> замораживание-> 16-> 17 и так далее.
Я взял код из HERE с небольшими изменениями
«Thread.Sleep» в этом примере - только для его замедления. Вы не хотите этого, поэтому просто удалите его из своего кода. –
Итак, вы говорите мне, что «Thread.Sleep» несет ответственность за это странное поведение? – szpic
Ему это нужно, чтобы видеть цифры в 'textBox1'. – GeorgeChond