Код не выполняется в потоке
От: akamda1989  
Дата: 06.12.11 11:49
Оценка:
FixedDocumentSequence OldSeq = OldXpsDoc.GetFixedDocumentSequence();


Данная строчка при вызовк в главном потоке выполняется нормально. При вызове ее в дочернем потоке на тех же условиях, возникают эксепшены.
В МСДН написано:

Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see Using Libraries from Partially Trusted Code.

Поясните в чем причина эксепшнов и как с ними бороться?
xpsdocument fixeddocumentsequence
Re: Код не выполняется в потоке
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 06.12.11 13:22
Оценка:
Здравствуйте, akamda1989, Вы писали:
A>
A>FixedDocumentSequence OldSeq = OldXpsDoc.GetFixedDocumentSequence();
A>

A>Данная строчка при вызовк в главном потоке выполняется нормально. При вызове ее в дочернем потоке на тех же условиях, возникают эксепшены.
A>В МСДН написано:
A>Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see Using Libraries from Partially Trusted Code.
A>Поясните в чем причина эксепшнов и как с ними бороться?
Как создаете поток? Видимо ваш поток должен создаваться в STA, см. в сторону:

Thread thread = new Thread(MethodWhichRequiresSTA);  
thread.SetApartmentState(ApartmentState.STA);

Если до 4-го фреймворка или в противном случае в сторону TPL:
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
Re[2]: Код не выполняется в потоке
От: akamda1989  
Дата: 06.12.11 13:29
Оценка:
Здравствуйте, Spinifex, Вы писали:

S>Здравствуйте, akamda1989, Вы писали:

A>>
A>>FixedDocumentSequence OldSeq = OldXpsDoc.GetFixedDocumentSequence();
A>>

A>>Данная строчка при вызовк в главном потоке выполняется нормально. При вызове ее в дочернем потоке на тех же условиях, возникают эксепшены.
A>>В МСДН написано:
A>>Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see Using Libraries from Partially Trusted Code.
A>>Поясните в чем причина эксепшнов и как с ними бороться?
S>Как создаете поток? Видимо ваш поток должен создаваться в STA, см. в сторону:

Не помогает. Смотрю в сторону "Using Libraries from Partially Trusted Code" и чего то безрезультатно

S>
S>Thread thread = new Thread(MethodWhichRequiresSTA);  
S>thread.SetApartmentState(ApartmentState.STA);   
S>

S>Если до 4-го фреймворка или в противном случае в сторону TPL:
S>
S>var scheduler = TaskScheduler.FromCurrentSynchronizationContext();  
S>
Re: Код не выполняется в потоке
От: _d_m_  
Дата: 07.12.11 10:22
Оценка:
Здравствуйте, akamda1989, Вы писали:

A>Поясните в чем причина эксепшнов и как с ними бороться?


Причина эксепшенов оператор зроу. Боротся с ними при помощи трай-кэтч.

Ну, а если намек не понятен, какие конкретно исключения выбрасываются?
Re[2]: Код не выполняется в потоке
От: akamda1989  
Дата: 07.12.11 11:20
Оценка:
Здравствуйте, Spinifex, Вы писали:

S>Здравствуйте, akamda1989, Вы писали:

A>>
A>>FixedDocumentSequence OldSeq = OldXpsDoc.GetFixedDocumentSequence();
A>>

A>>Данная строчка при вызовк в главном потоке выполняется нормально. При вызове ее в дочернем потоке на тех же условиях, возникают эксепшены.
A>>В МСДН написано:
A>>Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see Using Libraries from Partially Trusted Code.
A>>Поясните в чем причина эксепшнов и как с ними бороться?
S>Как создаете поток? Видимо ваш поток должен создаваться в STA, см. в сторону:

S>
S>Thread thread = new Thread(MethodWhichRequiresSTA);  
S>thread.SetApartmentState(ApartmentState.STA);   
S>

S>Если до 4-го фреймворка или в противном случае в сторону TPL:
S>
S>var scheduler = TaskScheduler.FromCurrentSynchronizationContext();  
S>


Разобрался. Я вызывал в функции обратного вызова, которая по умолчанию MTA наверное. Можно сделать STA как-то?
Re[2]: Код не выполняется в потоке
От: akamda1989  
Дата: 07.12.11 11:32
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, akamda1989, Вы писали:


A>>Поясните в чем причина эксепшнов и как с ними бороться?


___>Причина эксепшенов оператор зроу. Боротся с ними при помощи трай-кэтч.


___>Ну, а если намек не понятен, какие конкретно исключения выбрасываются?


Разобрался. Я вызывал в функции обратного вызова TcpListens, которая по умолчанию MTA наверное. Можно ее сделать STA как-то? Или надо отказаться от функции обратного вызова?
Re[3]: Код не выполняется в потоке
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 07.12.11 12:22
Оценка:
A>Разобрался. Я вызывал в функции обратного вызова, которая по умолчанию MTA наверное. Можно сделать STA как-то?
Не, нельзя. Можно внутри сделать поток и сделать его STA.
Re[3]: Код не выполняется в потоке
От: _d_m_  
Дата: 08.12.11 06:26
Оценка:
Здравствуйте, akamda1989, Вы писали:

A>Здравствуйте, _d_m_, Вы писали:


___>>Здравствуйте, akamda1989, Вы писали:


A>>>Поясните в чем причина эксепшнов и как с ними бороться?


___>>Причина эксепшенов оператор зроу. Боротся с ними при помощи трай-кэтч.


___>>Ну, а если намек не понятен, какие конкретно исключения выбрасываются?


A>Разобрался. Я вызывал в функции обратного вызова TcpListens, которая по умолчанию MTA наверное. Можно ее сделать STA как-то? Или надо отказаться от функции обратного вызова?


Conrol.BeginInvoke/Invoke или Control.Dispatcher.BeginInvoke/Invoke

ну опять же методом телепатии, т.к. исходных данных 0.001
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.