Домены и темы приложений на C # - PullRequest
4 голосов
/ 13 июля 2011

Я пришел с небольшим вопросом, который не дает мне спать всю ночь.Может быть, это легко понять, но я не могу, пока.

Что лучше?Домен приложения внутри потока или поток внутри нового домена приложения?

Так в чем разница между:

static void Main() {
    AppDomain ad = AppDomain.CreateDomain ("NewDomain");
    Thread t = new Thread (delegate() { ad.DoCallBack (SomeMethod); });
    t.Start();
}

static void SomeMethod() { }

И:

public void Start() {
    myAssembly = Assembly.LoadFrom(dllFileName);
    Type myType = AssEnsamblado.GetType(myAseembly.Type);
    MethodInfo myMethod = tipo.GetMethod(@"StartDLL");
    object obj = Activator.CreateInstance(myType);
    Thread thrBase = new Thread(new ThreadStart(delegate() { myMethod.Invoke(obj, null); }));
    thrBase.Start();
}

Фрагмент вышевыполняется в классе, который наследуется от MBRO, чтобы создать удаленный экземпляр и вызвать метод, содержащий этот код.

Ответы [ 2 ]

0 голосов
/ 15 июля 2011

Держитесь подальше от такого кода (любой из примеров).Это превратит вашу жизнь в ад, если вы не любите проводить недели в отладке странных исключений здесь и там.

Перед лицом проблемы root - корректно завершите удаленную работу.Обычно есть много способов сделать это, включая различные способы отменить или прекратить это, но назвать грязный хак Thread.Abort() - просто зло.

0 голосов
/ 13 июля 2011

Я бы рискнул и сказал, что, как только ваш код выполняется в новом Домене приложений, он в любом случае практически не имеет значения.

Проблема заключается в переходе в другой домен приложения, который может потребовать сериализации / маршалинга объектов (если он это поддерживает), которые передаются / возвращаются в новый домен приложения.

...