Я меняю Text
кнопки от BackgroundWorker
, и он работает. Я думал, что это должно было сделать исключение. Почему не так?Почему CAN BackgroundWorker изменяет компоненты пользовательского интерфейса?
Почему я не могу получить Cross-thread operation not valid: ... accessed from a thread other than the thread it was created on.
?
EDIT: Спасибо всем.
Возможно, причина в том, что в пользовательском интерфейсе был: Thread.Sleep(1000);
.
public Form1()
{
InitializeComponent();
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerAsync();
Thread.Sleep(1000);
}
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
button1.Text = "a";
}
Однако я заметил, что следующий код работает отлично, а также, несмотря влияющие на интерфейс (косвенно).
public partial class Form1 : Form
{
int i;
public Form1()
{
InitializeComponent();
i = 1;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerAsync();
for (int j = 0; j < 100000000; j++) ;
button1.Text = i.ToString();
}
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
i = 2;
}
}
Почему?
показать свой исходный код ... – Yahia
Что это? 'for (int j = 0; j <100000000; j ++); button1.Text = i.ToString(); 'Вы имеете в виду' for (int j = 0; j <100000000; j ++) {button1.Text = i.ToString(); } '? – user973511
@Fuex No. Цикл должен доказать, что 'i' изменяется с помощью BGW _, пока поток пользовательского интерфейса работает_. Его «Текст» заканчивается как «2». – ispiro