C# 在调用mainform时,从一个类中的方法获取信息到mainform?

C# 在调用mainform时,从一个类中的方法获取信息到mainform?,c#,events,delegates,C#,Events,Delegates,这是另一个类中的一个方法,我想在mainform中从中获取消息 string message = Encoding.ASCII.GetString(data); Console.WriteLine(message); 我能否以某种方式从主方法订阅此方法,以便在每次触发此方法时获取数据 编辑: 好的,这就是我的代码现在的样子: } else { string message = Encoding.ASCII.Ge

这是另一个类中的一个方法,我想在mainform中从中获取消息

 string message = Encoding.ASCII.GetString(data);
 Console.WriteLine(message);
我能否以某种方式从主方法订阅此方法,以便在每次触发此方法时获取数据

编辑: 好的,这就是我的代码现在的样子:

                    } else {
                    string message = Encoding.ASCII.GetString(data);
                    DoSomething(message);
                    //Console.WriteLine(message);
                }
            } catch (Exception ex) {
                Log("Error recieving data: " + ex.ToString());
            }
        }
    }

    public delegate void SomethingHappenedHandler(string s);
    public SomethingHappenedHandler SomethingHappened = null;

    public void DoSomething(string message)
    {
        Console.WriteLine(message);
        var sh = SomethingHappened;
        if (sh == null)
        {
            sh(message);
        }
    }
在主要方法中:

            dht.dhtNode.SomethingHappened += (msg) =>
        {
            talkText.Text += "[Friend]:  " + msg + "\n\n";
        };

但它不会触发它吗?我还应该做什么才能使它工作?

您可以创建一个委托并订阅它。例如

someInstance.SomethingHappened += (msg) =>
    {
        //your code
    };

编辑:
要在UI控件中显示结果,您应该了解跨线程操作

我不清楚你想做什么。另一种方法是什么?为什么你就不能叫它?当您尝试调用它时出现了什么问题?该方法正在另一个线程中运行,并且在我获取udp数据包时被触发,因此我无法按原样调用它。方法不是“在线程中”。你是怎么称呼它的?当你这么做的时候,问题是什么?现在环境已经改变了。现在这是一个后续问题,因为
好的,这就是我的代码现在的样子
是我的答案的副本(这也解释了你的新问题)如果(sh!=null)
public delegate void SomethingHappenedHandler(string s);
public SomethingHappenedHandler SomethingHappened = null;

public void DoSomething()
{
    string message = Encoding.ASCII.GetString(data);
    Console.WriteLine(message);

    var sh = SomethingHappened;
    if (sh != null) sh(message);
}