C# Can';t使用线程从文本框打印文本。
无法了解如何从线程更新文本框。有什么想法吗?抱歉,如果变量名和字符串是挪威语。如果有问题,我们可以解决。 问题主要是我无法从线程中访问文本框。我是否创建单独的线程,一个用于服务器,另一个用于更新txtbox?那样的话,我该怎么做C# Can';t使用线程从文本框打印文本。,c#,wpf,multithreading,tcp-ip,tcpserver,C#,Wpf,Multithreading,Tcp Ip,Tcpserver,无法了解如何从线程更新文本框。有什么想法吗?抱歉,如果变量名和字符串是挪威语。如果有问题,我们可以解决。 问题主要是我无法从线程中访问文本框。我是否创建单独的线程,一个用于服务器,另一个用于更新txtbox?那样的话,我该怎么做 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Window
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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.Net;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
namespace SentralGUI.Pages
{
/// <summary>
/// Interaction logic for Server.xaml
/// </summary>
public partial class Server : UserControl
{
public class Bruker
{
public string BrukerID { get; set; }
public string Passord { get; set; }
public string Forbruk { get; set; }
}
public class ServerStart
{
public List<Bruker> brukerList { get; set; }
int n = 3;
int n_login = 5;
int recv, recvID, recvP;
byte[] data = new byte[1024];
string mottattKundeID;
string mottattPassord;
string consoleText = "";
public string TxtUt()
{
return consoleText;
}
public void Start()
{
Socket lytteSokkel = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
IPEndPoint serverEP = new IPEndPoint(
IPAddress.Parse("127.0.0.1"), 9050);
lytteSokkel.Bind(serverEP);
lytteSokkel.Listen(10);
while (n-- > 0)
{
consoleText = "venter på en klient...";
Socket kommSokkel = lytteSokkel.Accept(); // blokkerende
// metode
IPEndPoint klientEP =
(IPEndPoint)kommSokkel.RemoteEndPoint;
consoleText = "Har forbindelse med {0} på port {1}" +
klientEP.Address + serverEP.Port;
string startup = "Login med kunde ID og passord:";
data = Encoding.ASCII.GetBytes(startup);
kommSokkel.Send(data, data.Length, SocketFlags.None);
while (n_login > 0)
{
kommSokkel.Send(Encoding.ASCII.GetBytes("\nBruker ID: "));
data = new byte[1024];
recvID = kommSokkel.Receive(data);
if (recvID == 0)
break;
mottattKundeID =
Encoding.ASCII.GetString(data, 0, recvID);//her kommer input fra klient: BrukerID
kommSokkel.Send(Encoding.ASCII.GetBytes("Passord: "));
recvP = kommSokkel.Receive(data);
mottattPassord = Encoding.ASCII.GetString(data, 0, recvP);//her kommer input fra klient: Passord
bool godkjent_Login = Login(mottattKundeID, mottattPassord, brukerList);
if (godkjent_Login)
{
kommSokkel.Send(Encoding.ASCII.GetBytes("\nGodkjent innlogging! Trykk en tast for å få ditt forbruk.\n"));
string kundeForbruk = SkrivUtForbruk(mottattKundeID, brukerList);
kommSokkel.Send(Encoding.ASCII.GetBytes(kundeForbruk));
n_login = 0;
}
else kommSokkel.Send(Encoding.ASCII.GetBytes("\nBruker ID eller passord er feil! Prøv igjen."));
}
consoleText = "Forbindelsen med {0} er brutt " +
klientEP.Address;
n_login = 5;
kommSokkel.Close();
}
lytteSokkel.Close();
}
private static string SkrivUtForbruk(string kundeID, List<Bruker> bruker)
{
string forbrukUT = "";
foreach (Bruker kunde in bruker)
{
if (kunde.BrukerID.Contains(kundeID)) forbrukUT = kunde.Forbruk;
}
return forbrukUT;
}
private static bool Login(string id, string pass, List<Bruker> bl)
{
bool godkjent = false;
//var brukerLogin = new List<BrukerLogin>();
//brukerLogin.Add(new BrukerLogin { BrukerIDInn = id , PassordInn = pass });
foreach (Bruker kunde in bl)
{
if (kunde.BrukerID == id && kunde.Passord == pass) godkjent = true;
}
// Console.WriteLine(bl_godkjent);
//if (brukerID_godkjent) godkjent = true;
return godkjent;
}
}
public Server()
{
InitializeComponent();
txtConsol.IsEnabled = false;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
btnServerStart.IsEnabled = false;
var brukerList = new List<Bruker>();
brukerList.Add(new Bruker { BrukerID = "13", Passord = "iamlorde", Forbruk = "6KW" });
brukerList.Add(new Bruker { BrukerID = "14", Passord = "iamlorde", Forbruk = "5KW" });
brukerList.Add(new Bruker { BrukerID = "15", Passord = "iamlorde", Forbruk = "63KW" });
brukerList.Add(new Bruker { BrukerID = "16", Passord = "iamlorde", Forbruk = "71KW" });
brukerList.Add(new Bruker { BrukerID = "17", Passord = "iamlorde", Forbruk = "1KW" });
ServerStart objSTart = new ServerStart();
Thread objTraad = new Thread(new ThreadStart(objSTart.Start));
objTraad.Start();
while (!objTraad.IsAlive)
{
Thread.Sleep(1000);
string txt_ut = objSTart.TxtUt();
TxtUt(txt_ut);
}
}
public void TxtUt(string ct)
{
txtConsol.AppendText(ct);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
Net系统;
使用System.Net.Sockets;
使用系统线程;
使用System.Threading.Tasks;
命名空间SentralGUI.Pages
{
///
///Server.xaml的交互逻辑
///
公共部分类服务器:UserControl
{
公共级布鲁克
{
公共字符串BrukerID{get;set;}
公共字符串密码{get;set;}
用于bruk{get;set;}的公共字符串
}
公共类服务器启动
{
公共列表brukerList{get;set;}
int n=3;
int n_login=5;
int recv、recvID、recvP;
字节[]数据=新字节[1024];
莫塔特昆德弦;
串珠;
字符串consoleText=“”;
公共字符串TxtUt()
{
返回控制台文本;
}
公开作废开始()
{
插座插座插座=新插座(
AddressFamily.InterNetwork,
SocketType.Stream,
原型(Tcp);
IPEndPoint服务器EP=新IPEndPoint(
IPAddress.Parse(“127.0.0.1”),9050);
lytteSokkel.Bind(serverEP);
lytteSokkel.听(10);
而(n-->0)
{
consoleText=“venter påen klient…”;
Socket kommSokkel=lytteSokkel.Accept();//blokkerende
//梅托德
克利恩特普伊本德角酒店=
(IPEndPoint)kommSokkel.RemoteEndPoint;
consoleText=“Har forbindelse med{0}påport{1}”+
klientEP.Address+serverEP.Port;
string startup=“登录med kunde ID og passord:”;
数据=Encoding.ASCII.GetBytes(启动);
发送(数据,数据,长度,SocketFlags.None);
而(n_登录>0)
{
Send(Encoding.ASCII.GetBytes(“\nBruker ID:”);
数据=新字节[1024];
recvID=kommSokkel.Receive(数据);
if(recvID==0)
打破
莫塔特昆德=
Encoding.ASCII.GetString(数据,0,recvID);//她的kommer输入框:BrukerID
Send(Encoding.ASCII.GetBytes(“Passord:”);
recvP=kommSokkel.Receive(数据);
mottattPassord=Encoding.ASCII.GetString(data,0,recvP);//她的kommer输入框:Passord
bool godkjent_Login=登录(mottattKundeID、mottattPassord、brukerList);
如果(godkjent_登录)
{
发送(Encoding.ASCII.GetBytes(“\nGodkjent innloging!tryk en tast foråfåditt forbruk.\n”);
字符串kundeForbruk=SkrivUtForbruk(mottattKundeID,brukerList);
Send(Encoding.ASCII.GetBytes(kundeForbruk));
n_login=0;
}
else kommSokkel.Send(Encoding.ASCII.GetBytes(“\nBruker ID eller passord er feil!Prøv igjen.”);
}
consoleText=“Forbindelsen med{0}er brutt”+
klientEP.地址;
n_login=5;
kommSokkel.Close();
}
lytteSokkel.Close();
}
私有静态字符串SkrivUtForbruk(字符串kundeID,列表bruker)
{
字符串forbrukUT=“”;
foreach(布鲁克的布鲁克昆德)
{
如果(kunde.BrukerID.Contains(kundeID))forbrukUT=kunde.Forbruk;
}
返回布鲁库特;
}
私有静态bool登录(字符串id、字符串传递、列表bl)
{
bool-godkjent=false;
//var brukerLogin=新列表();
//Add(新的brukerLogin{brukeridin=id,PassordInn=pass});
foreach(bl内的布鲁克·昆德)
{
如果(kunde.BrukerID==id&&kunde.Passord==pass)godkjent=true;
}
//控制台写入线(bl_godkjent);
//如果(brukerID_godkjent)godkjent=true;
返回戈德詹特;
}
}
公共服务器()
{
初始化组件();
txtConsol.IsEnabled=false;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{
btnServerStart.IsEnabled=false;
var brukerList=新列表();
添加(新的Bruker{BrukerID=“13”,Passord=“iamrolde”,Forbruk=“6KW”});
添加(新的Bruker{BrukerID=“14”,Passord=“iamrolde”,Forbruk=“5KW”});
添加(新的Bruker{BrukerID=“15”,Passord=“iamrolde”,Forbruk=“63KW”});
添加(新的Bruker{BrukerID=“16”,Passord=“iamrolde”,Forbruk=“71KW”});
添加(新的Bruker{BrukerID=“17”,Passord=“iamrolde”,Forbruk=“1KW”});
ServerStart objSTart=newserverstart();
线程objTraad=新线程(新线程开始(objSTart
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(()=>{
yourTextBox.Text = // your value;
Console.WriteLine(yourTextBox.Text);
}));
if (Application.Current.Dispatcher.CheckAccess()) {