У меня есть приложение winform (одна форма), в этой форме есть RichTextBox.В конструкторе этой формы я создаю экземпляр класса MyClass
.В «Form_Load» я вызываю метод Initialisation
из MyClass
instance.
В конструкторе формы
myClass = new MyClass(RichTextBox richTextBox);
В Form_Load
myClass.Initialisation();
В методе Initialisation
, в цикле, я читаю, что некоторые параметры делают другие вещи.Чтобы не заморозить приложение (поскольку некоторые операции могут занять некоторое время, несколько секунд), я использую BackgroundWorker
.Я использую это так (см. Код ниже).
Когда я выполняюсь, я получаю эту ошибку: Операция с несколькими потоками недопустима: доступ к элементу управления 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){}
}