C# 在新线程上调用静态方法

C# 在新线程上调用静态方法,c#,asp.net,multithreading,C#,Asp.net,Multithreading,假设我有这样一个静态方法: public static string ProcessMessage() { string testString = " this is test "; .... return testString ; } 另一种方法是发送消息: public void SendMessage() { Thread th = new Thread(this.ProcessMessage); th.Start(); th.

假设我有这样一个静态方法:

public static string ProcessMessage()
{
     string testString = " this is test ";
     ....
     return testString ;
}
另一种方法是发送消息:

public void SendMessage()
{
     Thread th = new Thread(this.ProcessMessage);
     th.Start();
     th.Join();
}
当SendMessage一个接一个地被多次调用时会发生什么


假设第一个线程调用ProcessMessage并位于第1行,而另一个线程调用ProcessMessage,第一个线程会发生什么情况?由于ProcessMessage是一个静态方法,它会结束吗?ProcessMessage属性将是什么样子?线程2会覆盖线程1吗?

要回答您的一般问题,多个线程可以调用静态方法,每个线程将分别处理该方法调用。如果静态方法中使用了静态变量,那么您可能会遇到跨线程问题,因为这些变量在多个线程之间共享,但方法代码本身只是一组指令,后面跟着进入它的线程

对于您的特定示例,只能传递一个或一个对象(可能还有一个Int32)。这两种类型的ThreadStart参数都是具有无效签名的委托(它们不能返回任何内容)


另外,因为您正在调用Thread.Start,后跟。Join阻塞调用线程,直到等待的线程完成。既然如此,来自同一线程的多个SendMessage()调用将永远不会同时产生多个线程。相反,每次调用都将创建一个新线程,然后等待它完成,然后再继续下一次调用SendMesage()。这并不比在原始线程中简单地调用ProcessMessage好。

要回答您的一般问题,多个线程可以调用一个静态方法,每个线程将分别处理该方法调用。如果静态方法中使用了静态变量,那么您可能会遇到跨线程问题,因为这些变量在多个线程之间共享,但方法代码本身只是一组指令,后面跟着进入它的线程

对于您的特定示例,只能传递一个或一个对象(可能还有一个Int32)。这两种类型的ThreadStart参数都是具有无效签名的委托(它们不能返回任何内容)


另外,因为您正在调用Thread.Start,后跟。Join阻塞调用线程,直到等待的线程完成。既然如此,来自同一线程的多个SendMessage()调用将永远不会同时产生多个线程。相反,每次调用都将创建一个新线程,然后等待它完成,然后再继续下一次调用SendMesage()。这并不比简单地在原始线程中调用ProcessMessage好。

Um,您似乎试图在方法中声明属性。那是无效的。如果您要问我们代码在执行时的行为,它必须是有效的代码。如果您尝试在Jon所说的基础上获得
预期的带有无效签名的方法,您不能通过
this
调用
ProcessMessage
,因为它是一个静态方法。如果它们在同一个类中,则应使用类名或仅使用方法名。是否尝试运行代码并使用Visual Studio内部构建的工具确定应用程序堆栈中的内容?抱歉,我正在复制一些示例代码。它可能是无效的,但你得到了一个大致的想法。thanksUm,您似乎试图在方法中声明属性。那是无效的。如果您要问我们代码在执行时的行为,它必须是有效的代码。如果您尝试在Jon所说的基础上获得
预期的带有无效签名的方法,您不能通过
this
调用
ProcessMessage
,因为它是一个静态方法。如果它们在同一个类中,则应使用类名或仅使用方法名。是否尝试运行代码并使用Visual Studio内部构建的工具确定应用程序堆栈中的内容?抱歉,我正在复制一些示例代码。它可能是无效的,但你得到了一个大致的想法。谢谢