У меня есть приложение winform (одна форма), на этой форме есть RichTextBox. В конструкторе этой формы я создаю экземпляр класса MyClass
. В «Form_Load» я вызываю метод Initialisation
от MyClass
экземпляра.BackgroundWorker - Работа с перекрестными потоками не действительна
в виде конструктора
myClass = new MyClass(RichTextBox richTextBox);
В Form_Load
myClass.Initialisation();
В методе Initialisation
, в цикле, я прочитал некоторые parmeters делают другие материалы. Чтобы не замораживать приложение (потому что некоторая операция может занять некоторое время, несколько секунд), я использую BackgroundWorker
. Я использую его так (см. Код ниже).
Когда я исполняю, я получаю эту ошибку: операции Cross-нить не действует: Control «RichTextBox» доступ из потока, отличного от резьбы она была создана на.
Не могли бы вы рассказать мне, как решить это? Работа идеально подходит, когда я не имеют доступа к richTextBox
public Class MyClass
{
static BackgroundWorker _bw;
public MyClass()
{
_bw = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
_bw.DoWork += bw_DoWork;
_bw.ProgressChanged += bw_ProgressChanged;
_bw.RunWorkerCompleted += bw_RunWorkerCompleted;
}
static void bw_DoWork(object sender, DoWorkEventArgs e)
{
foreach (....)
{
if (....)
{
richtextBox.Text.AppendText("MyText");
}
}
e.Result = true;
}
static void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){}
static void bw_ProgressChanged(object sender, ProgressChangedEventArgs e){}
}
Это работает, спасибо – mili