Доброго времени суток.
Столкнулся с такой проблемой. Мне нужно провести обмен данными с одной системой, предоставляющей только COM-интерфейс. Делаю я это так:
private void startButton_Click(object sender, EventArgs e)
{
string assembly = Environment.CurrentDirectory + "\\Import.dll";
if (File.Exists(assembly))
{
AppDomain worker = AppDomain.CreateDomain("Worker");
Thread t = new Thread(() =>
{
Trace.WriteLine(AppDomain.CurrentDomain.FriendlyName);
AbstractImport import = (AbstractImport)worker.CreateInstanceFromAndUnwrap(
assembly,
"Import.Import1CtoTS");
if (import != null)
{
import.Initialize(this);
import.ProgressChanged += new Shared.ProgressChangedEventHandler(import_ProgressChanged);
import.Start("ts", "Superuser", "123");
}
AppDomain.Unload(worker);
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
}
При первом нажатии на кнопку startButton код отрабатывает нормально. При повторном нажатии обмен тоже отрабатывает, но при закрытии приложения вываливается AppCrash c исключением 0x0eedfade.
Если этот код вызывать синхронно, так:
private void startButton_Click(object sender, EventArgs e)
{
string assembly = Environment.CurrentDirectory + "\\Import.dll";
if (File.Exists(assembly))
{
AppDomain worker = AppDomain.CreateDomain("Worker");
//Thread t = new Thread(() =>
//{
Trace.WriteLine(AppDomain.CurrentDomain.FriendlyName);
AbstractImport import = (AbstractImport)worker.CreateInstanceFromAndUnwrap(
assembly,
"Import.Import1CtoTS");
if (import != null)
{
import.Initialize(this);
import.ProgressChanged += new Shared.ProgressChangedEventHandler(import_ProgressChanged);
import.Start("ts", "Superuser", "123");
}
AppDomain.Unload(worker);
//});
//t.SetApartmentState(ApartmentState.STA);
//t.Start();
}
}
то импорт, выполняемый многократно без перезапуска приложения отрабатывает нормально и приложение не крэшится при выходе.
Помогите решить проблему с выполнением кода в отдельном потоке.