我正在寻找创建当前方法运行的Thread的方法。
我会使用新的StackFrame(int)。GetMethod()。名称,但是我在运行它时遇到了一个新线程,所以这个已经出来了。
我的代码示例如下:
private void doSomething(object sender, EventArgs e)
{
try
{
Thread thread = new Thread(new ParameterizedThreadStart(GenerateThreadMethod));
thread.Start(new Dictionary<String, Object>() {
{ "date" , Convert.ToDateTime(monthCalendar.SelectionRange.Start)},
{ "path", myList[myListBox.SelectedIndex][1] }
});
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void GenerateThreadMethod(Object obj)
{
Dictionary<String, Object> data = (Dictionary<String, Object>)obj;
DateTime date = (DateTime)data["date"];
String path = (String)data["path"];
//I want to find the name of doSomething() right here
doMoreThings(date, path);
}
答案 0 :(得分:4)
没有内置方法可以做到这一点。但是,您可以将任意对象传递给您的ParametrizedThreadStart委托,该委托可以包括您要传达的任何信息,包括调用方法名称。
答案 1 :(得分:2)
您无法识别父线程。
我已经看到另一个建议您可以尝试使用来自父线程的线程ID为新线程的名称添加前缀,然后在要生成的方法上创建一个构造函数,该构造函数需要来自父线程的线程ID。
然后你可以使用这些信息来至少获得对父线程的访问权限,并从那里开始,但我不确定这是否会让你足够接近你希望实现的目标。
答案 2 :(得分:1)
我不认为有一种方法可以访问它,因为你的新主题拥有它自己的上下文。我宁愿建议在创建线程时传递调用者的名字。
所以在调用者中你会写
StackTrace st = new StackTrace ();
StackFrame sf = st.GetFrame (0);
MethodBase currentMethodName = sf.GetMethod ();
并将结果作为调用参数传递给新线程。