C# 如何访问主窗口&x27;从另一个对象更改UI元素的方法?
我正在开发一个简单的网络游戏(Tictatcoe)。 有一个C# 如何访问主窗口&x27;从另一个对象更改UI元素的方法?,c#,wpf,multithreading,C#,Wpf,Multithreading,我正在开发一个简单的网络游戏(Tictatcoe)。 有一个主窗口类,它包含很少的用户控件(画布,文本框,很少的标签等)。 main窗口类包含一个类ClientTCP(由我自己制作)的对象,该对象运行一个侦听服务器的新线程。如果ClientTCP对象从服务器获取新数据包,则应采取一些措施 假设“PacketYouHaveWon”到达ClientTCP。然后我想ClientTCP在main窗口的控制台“呵呵”上写东西 我通过这样做来实现这一点: public MainWindow() {
主窗口
类,它包含很少的用户控件(画布
,文本框
,很少的标签
等)。
main窗口
类包含一个类ClientTCP
(由我自己制作)的对象,该对象运行一个侦听服务器的新线程。如果ClientTCP
对象从服务器获取新数据包,则应采取一些措施
假设“PacketYouHaveWon”到达ClientTCP
。然后我想ClientTCP
在main窗口的
控制台“呵呵”上写东西
我通过这样做来实现这一点:
public MainWindow()
{
InitializeComponent();
writeInConsole += writeInConsole2;
}
public static Delegate1 writeInConsole;
public delegate void Delegate1(string str1);
private void writeInConsole2(string txt)
{
textBoxConsole.Dispatcher.Invoke(new Action(() => textBoxConsole.AppendText(txt + "\n")));
}
在ClientTCP
中,当我收到这样的数据包时,我只是在打电话
Game.writeInConsole("hehe");
这个方法行吗?我想知道是否还有其他(可能更好?)方法可以做到这一点。使用
操作
而不是创建委托类型。但是操作要求writeInConsole2方法是静态的,如果我将该方法设置为静态的,我就无法从那里访问UI控件,因为对我来说这很困难,为什么不能将writeInConsole2方法公开,并在需要写入控制台时调用它,不需要委托对不起,我意识到误解了这个问题。更好的方法是在ClientTCP类中实现事件,并在MainWindow中订阅该事件,在事件的处理程序中,您可以调用writeInConsole2方法。字符串“hehe”你应该将其放入事件args中你能举个例子支持我吗?