Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何访问主窗口&x27;从另一个对象更改UI元素的方法?_C#_Wpf_Multithreading - Fatal编程技术网

C# 如何访问主窗口&x27;从另一个对象更改UI元素的方法?

C# 如何访问主窗口&x27;从另一个对象更改UI元素的方法?,c#,wpf,multithreading,C#,Wpf,Multithreading,我正在开发一个简单的网络游戏(Tictatcoe)。 有一个主窗口类,它包含很少的用户控件(画布,文本框,很少的标签等)。 main窗口类包含一个类ClientTCP(由我自己制作)的对象,该对象运行一个侦听服务器的新线程。如果ClientTCP对象从服务器获取新数据包,则应采取一些措施 假设“PacketYouHaveWon”到达ClientTCP。然后我想ClientTCP在main窗口的控制台“呵呵”上写东西 我通过这样做来实现这一点: public MainWindow() {

我正在开发一个简单的网络游戏(Tictatcoe)。 有一个
主窗口
类,它包含很少的用户控件(
画布
文本框
,很少的
标签
等)。

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中你能举个例子支持我吗?