为不同的线程使用不同的.config文件(.NET/C#)

问题描述:

这可能吗?为不同的线程使用不同的.config文件(.NET/C#)

我使用这个调用来实例化新的线程:

this.RunningThread = new Thread(new ParameterizedThreadStart(this.Run)); 

可选,我想不同的.config的位置传递给它。如果有的话,有可能如何?

谢谢!

+0

你是说在线程中执行的代码没有改变,但仍然使用不同的.config?或者你可以将配置文件的路径传递给线程上执行的代码吗? – rene 2011-02-26 21:24:11

+0

我想将不同的配置文件传递给仅在新线程上执行的代码。主线程应该使用与应用程序 – Igorek 2011-02-26 21:37:55

不,一个.config文件与一个AppDomain关联,而不是一个线程。在默认的CLR主机上,主appdomain被硬件烘焙到app.exe.config文件,您无法更改它。新的AppDomain可以通过AppDomainSetup.ConfigurationFile属性使用自己的.config文件进行配置。

要小心将数据从一个appdomain序列化到另一个appdomain所需的努力,如果您真的对隔离代码感兴趣,这是您只想做的事情。无论你想要做什么的原因,肯定有一个比AppDomain更好的方式来实现你的目标。

只是传递一个委托:

private void Run(string configPath) 
{ 

} 

... 
Thread thread = new Thread(()=> this.Run("foo.config")) ; 
thread.Start(); 
+0

一起提供的原始.config。我并不想将它作为参数传递,但我的意思是让不同的线程自动消耗不同的.config文件 – Igorek 2011-02-26 22:05:11

你可以尝试使用ConfigurationManager.OpenExeConfiguration方法,您通过配置文件的路径,并返回一个Configuration object

我不认为有任何办法有ConfigurationManager.AppSettingsConfigurationManager.ConnectionStrings在不同的线程返回不同的值,但是你可以保持由OpenExeConfig方法返回的配置对象的引用,并使用你的代码中。