C#如何识别创建当前方法所在线程的方法?
我希望确定创建当前方法正在运行的线程的方法 我会使用new StackFrame(int).GetMethod().Name,但在运行此程序时,我处于一个新线程中,因此此线程已过时 下面是我的代码示例:C#如何识别创建当前方法所在线程的方法?,c#,multithreading,methods,C#,Multithreading,Methods,我希望确定创建当前方法正在运行的线程的方法 我会使用new StackFrame(int).GetMethod().Name,但在运行此程序时,我处于一个新线程中,因此此线程已过时 下面是我的代码示例: private void doSomething(对象发送方,事件参数e) { 尝试 { 线程线程=新线程(新的参数化线程启动(GenerateThreadMethod)); thread.Start(新字典(){ {“date”,Convert.ToDateTime(monthCalendar
private void doSomething(对象发送方,事件参数e)
{
尝试
{
线程线程=新线程(新的参数化线程启动(GenerateThreadMethod));
thread.Start(新字典(){
{“date”,Convert.ToDateTime(monthCalendar.SelectionRange.Start)},
{“路径”,myList[myListBox.SelectedIndex][1]}
});
}
捕获(例外情况除外)
{
Show(例如ToString());
}
}
私有void GenerateThreadMethod(对象obj)
{
字典数据=(字典)obj;
日期时间日期=(日期时间)数据[“日期”];
字符串路径=(字符串)数据[“路径”];
//我想在这里找到doSomething()的名称
doMoreThings(日期、路径);
}
我认为没有办法访问它,因为新线程有自己的上下文。我建议在创建线程时传递调用方的名称
所以你会在呼叫者中写下
StackTrace st = new StackTrace ();
StackFrame sf = st.GetFrame (0);
MethodBase currentMethodName = sf.GetMethod ();
并将结果作为调用的参数传递给新线程。没有内置的方法来完成此操作。但是,您可以将任意对象传递给ParameterizedThreadStart委托,该委托可以包含您想要传递的任何信息,包括调用方法名称。您无法识别父线程 我看到另一个建议,您可以尝试在新线程的名称前面加上父线程的线程ID,然后在要生成的方法上创建一个构造函数,该方法需要父线程的线程ID
然后,您可以使用此信息至少获得对父线程的访问权,并从父线程开始,但我不确定这是否能让您离希望实现的目标足够近。虽然其他答案都很好,但我还是选择此答案。我还重新考虑了我希望在不同于代码的“级别”上传递信息的愿望。我认为这是该项目未来发展最安全的方式。