#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
методу.