//................
new Thread(() => Users.Add(data1, data2)).Start();
public class Users
{
public static void AddUsers(data1, data2)
{
//....
//richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname);
}
}
public delegate void UserData(string userSurname);
public event UserData onUserAdd;
onUserAdd(userSurname); //упадет если никто не подписался
onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
Users.onUserAdd += (userSurname) =>
{
richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname);
};
в классе Users объявляем делегат и событие- ясно.
и ниже по тексту вызываем наше событие кодом следующего вида- написал этот код в методе, сообщаемом с потоком.
а в форме перед запуском треда назначаем обработчик- не понял, куда писать этот код.
public partial class Form1 : Form
{
//.......
private void Button1_Click(object sender, EventArgs e)
{
string data1= TextBox1.Text;
string data2= TextBox2.Text;
// Сообщаем метод Add с потоком и запускаем поток.
new Thread(() => Users.Add(data1, data2)).Start();
}
}
public class Users
{
public delegate void UserData(string userSurname);
public event UserData onUserAdd;
public static void AddUsers(string data1, string data1)
{
// Тут код добавления пользователя.
// Вывод фамилии добавленного пользователя в текстовое поле.
// Ошибка Для нестатического поля, метода или свойства "Users.onUserAdd" требуется ссылка на объект.
onUserAdd(userSurname); //упадет если никто не подписался
onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
}
а в форме перед запуском треда назначаем обработчик
new Thread(() => Users.Add(data1, data2)).Start();
public partial class Form1 : Form
{
//.......
private void Button1_Click(object sender, EventArgs e)
{
string data1= TextBox1.Text;
string data2= TextBox2.Text;
Users.onUserAdd += (userSurname) =>
{
richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname); // Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'richTextBox1' не из того потока, в котором он был создан.
};
// Сообщаем метод Add с потоком и запускаем поток.
new Thread(() => Users.Add(data1, data2)).Start();
}
}
public class Users
{
public delegate void UserData(string userSurname);
public static event UserData onUserAdd; // Сделал статик
public static void AddUsers(string data1, string data1)
{
// Тут код добавления пользователя.
// Вывод фамилии добавленного пользователя в текстовое поле.
// Ошибка Для нестатического поля, метода или свойства "Users.onUserAdd" требуется ссылка на объект.
onUserAdd(userSurname); //упадет если никто не подписался
onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
}
Users.onUserAdd += (userSurname) =>
{
Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname));
};
using System.Threading;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
//..
Users.onUserAdd += (userSurname) =>
{
Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname)); // Dispatcher не существует в текущем контексте.
};
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.DirectoryServices;
using System.Diagnostics;
using System.IO;
using ExcelDataReader;
using System.Threading;
using System.Windows.Threading; // Тип или имя пространства имен "Threading" не существует в пространстве имен "System.Windows" (возможно, отсутствует ссылка на сборку).
Users.onUserAdd += (userSurname) =>
{
richTextBox1.BeginInvoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname));
};
Евгений Иванов, странно, должен быть там же
using System.Windows.Threading;
// Для нестатического поля, метода или свойства "Dispatcher.Invoke(Action)" требуется ссылка на объект.
Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname));
Dispatcher dispatcherUI = Dispatcher.CurrentDispatcher;
dispatcherUI.Invoke(/*то что Вы собираетесь сделать*/);