Erreur dans C #: "Une référence d'objet est requise pour le champ, la méthode ou la propriété non statique"

J'ai écrit le code dans WPF. Tout d'abord, j'ai écrit un projet distinct pour tester de travail avec un Port COM appareil, et il a bien fonctionné. Ensuite, j'ai décidé de l'intégrer dans un autre projet, mais j'obtiens une erreur. Je n'ai pas de changer le code; je suis juste copié dans un nouveau fichier de code.

Ce code fonctionne bien:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO.Ports;
using System.Windows.Threading;
namespace WpfApplication2
{
///<summary>
///Interaction logic for MainWindow.xaml
///</summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
serial.BaudRate = 9600;
serial.Handshake = System.IO.Ports.Handshake.None;
serial.Parity = Parity.None;
serial.DataBits = 8;
serial.StopBits = StopBits.One;
serial.ReadTimeout = 200;
serial.WriteTimeout = 500;
serial.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Recieve);
}
SerialPort serial = new SerialPort();
private string recieved_data;
private delegate void UpdateUiTextDelegate(string text);
private void Recieve(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (serial.IsOpen)
{
try
{
recieved_data = serial.ReadLine();
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(DisplayText), recieved_data);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
private void DisplayText(string code)
{
textBox1.AppendText(string1);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
ListBoxItem lbi = new ListBoxItem();
lbi = (ListBoxItem)listBox1.SelectedItem;
serial.Close();
serial.PortName = "COM" + (string)lbi.Content;
try
{
serial.Open();
textBox1.AppendText("Device opened at " + serial.PortName + '\n');
}
catch (Exception ex)
{
textBox1.AppendText(ex.Message + '\n');
}
}
}
}

Mais celui-ci ne veulent pas travailler, et je ne comprends pas pourquoi:

using System.IO.Ports;
using System.Windows.Threading;
using System;
using System.Windows;
namespace PresidentProtocol
{
public class QRBarCode
{
//private SerialPort serial = new SerialPort();
public QRBarCode(string com)
{
serial.BaudRate = 9600;
serial.Handshake = System.IO.Ports.Handshake.None;
serial.Parity = Parity.None;
serial.DataBits = 8;
serial.StopBits = StopBits.One;
serial.ReadTimeout = 200;
serial.WriteTimeout = 500;
serial.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Recieve);
serial.Close();
serial.PortName = com;
try
{
serial.Open();
}
catch (Exception)
{
MessageBox.Show("Error opening COM port.");
}
}
SerialPort serial = new SerialPort();
private string recieved_data;
private delegate void UpdateUiTextDelegate(string text);
private void Recieve(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (serial.IsOpen)
{
try
{
recieved_data = serial.ReadLine();
Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(DisplayText), recieved_data);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
private void DisplayText(string code)
{
MessageBox.Show(code);
}
}
}

Erreur:

Une référence d'objet est requise pour la non-statique champ, une méthode ou une propriété du Système".De Windows.Le filetage.Répartiteur.Invoke(Système D'.De Windows.Le filetage.DispatcherPriority, Système.Délégué, objet)'
E:\C#\PresidentProtocol\PresidentProtocol\classes\QRCodeReader.cs

sur cette ligne de code:

Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(DisplayText), recieved_data);

source d'informationauteur Yury Kerbitskov