2016-05-17 2 views
0

Как установитьData для нового созданного AppDomain. Когда я делаю DoCallBack для своего testFunc, я получаю исключение «System.NullReferenceException». Что я делаю неправильно?Как установить данные в новый Appdomain

var client = "test"; 
var engine = 123; 

AppDomain appDomain = AppDomain.CreateDomain("newDomain"); 

appDomain.SetData("client", client); 
appDomain.SetData("engine", engine); 

appDomain.DoCallBack(testFunc); 

private void testFunc() 
{ 
    var client = (string)AppDomain.CurrentDomain.GetData("client"); 
    var engine = (int)AppDomain.CurrentDomain.GetData("engine"); 

    Console.WriteLine("client: " + client); 
    Console.WriteLine("engine: " + engine); 
} 

Установка vars globaly для AppDomain не меняет анонимность, такую ​​же ошибку.

AppDomain.CurrentDomain.SetData("client", client); 
AppDomain.CurrentDomain.SetData("engine", engine); 

P.S. Я получаю System.NullReferenceException, потому что AppDomain не может найти эти vars, которые я установил до DoCallBack. Итак, как правильно настроить их?

+0

Возможный дубликат [Что такое NullReferenceException, и как это исправить ?] (http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – Nasreddine

+0

Нет, это не так. – SLI

+0

Я создал консольное приложение, скопировал предоставленный код и все работает так, как вы ожидали. – Kzrystof

ответ

0

Если вы показываете нам правильный код, вы не можете установить нестатический и без метода экземпляра на DoCallBack().

Метод должен быть статическим:

private static void testFunc() 
{ 
    var client = (string)AppDomain.CurrentDomain.GetData("client"); 
    var engine = (int)AppDomain.CurrentDomain.GetData("engine"); 

    Console.WriteLine("client: " + client); 
    Console.WriteLine("engine: " + engine); 
} 

или вы должны создать экземпляр, прежде чем перейти в DoCallBack()

var instance = new Program(); 
appDomain.DoCallBack(instance.testFunc);