Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/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#如何识别创建当前方法所在线程的方法?_C#_Multithreading_Methods - Fatal编程技术网

C#如何识别创建当前方法所在线程的方法?

C#如何识别创建当前方法所在线程的方法?,c#,multithreading,methods,C#,Multithreading,Methods,我希望确定创建当前方法正在运行的线程的方法 我会使用new StackFrame(int).GetMethod().Name,但在运行此程序时,我处于一个新线程中,因此此线程已过时 下面是我的代码示例: private void doSomething(对象发送方,事件参数e) { 尝试 { 线程线程=新线程(新的参数化线程启动(GenerateThreadMethod)); thread.Start(新字典(){ {“date”,Convert.ToDateTime(monthCalendar

我希望确定创建当前方法正在运行的线程的方法

我会使用new StackFrame(int).GetMethod().Name,但在运行此程序时,我处于一个新线程中,因此此线程已过时

下面是我的代码示例:

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


然后,您可以使用此信息至少获得对父线程的访问权,并从父线程开始,但我不确定这是否能让您离希望实现的目标足够近。

虽然其他答案都很好,但我还是选择此答案。我还重新考虑了我希望在不同于代码的“级别”上传递信息的愿望。我认为这是该项目未来发展最安全的方式。