Опубликовать текст в activeform из отдельного класса

#c# #.net #winforms #multithreading

#c# #.net #winforms #многопоточность

Вопрос:

Я пытаюсь отправить текст из класса в активную форму, и у меня возникли небольшие проблемы с выяснением, как это сделать. Я видел кучу об использовании вызова для публикации данных в потоках / формах, но я не могу заставить свой класс видеть какие-либо общедоступные функции в activeform.

Пример

 // File: Form1.cs

namespace Form1
{
    public partial class Form1 : Form
    {
        public void SetText(string text)
        {
            this.Invoke((MethodInvoker) delegate { \ Always requires invoke
                TextBox1.Text  = text   "n";
        });
    }
}
  

Затем мой второй класс, который выполняется во втором потоке (потому что это длительный процесс)

 // File: Class.cs

using Form1;

namespace Form1
{
    public void DoSomething() // Called in Form1
    {
        // Does stuff

        string TextToGoBack; // Has text when DoSomething runs

        // Here is where I get stuck
        Form form = Form1.ActiveForm;

        form.SetText(TextToGoBack); // SetText is not showing up here no matter what I do
    }
}
  

Редактировать:

Я бы не возражал против использования пользовательских событий для достижения того же самого, но мне тоже трудно разобраться с ними.

Комментарии:

1. Для чего нужен класс DoSomething() ?

2. Вы пробовали Form1 form = Form1.ActiveForm; ? В основном тип формы должен быть Form1 не Form

3. @sll Вау, это была в значительной степени проблема, ха-ха. Спасибо!

Ответ №1:

Form.ActiveForm возвращает Form объект, а не экземпляр вашего Form1 класса, поэтому не имеет SetText метода.

Вы могли бы преобразовать его в a Form1 , но это было бы хрупким. Я бы передал экземпляр Form1 вашему DoSomething методу.