Re[3]: WebSite <STAThread()>
От: Овощ http://www.google.com
Дата: 02.08.07 09:34
Оценка:
Здравствуйте, Monstrik:

К сожалению у меня нет глубоких знаний по Interopу с COM'ом, но по этому поводу у меня такие мысли: атрибут STAThread здесь применен ошибочно.
Во первых говорится что "COM threading models only pertain to applications that use COM interop. Using this attribute in an application that does not use COM interop has no effect.", а в данном коде используются только managed классы.
Во вторых — "Apply this attribute to the entry point method (the Main() method in C# and Visual Basic). It has no effect on other methods.", а в данном случае он применен к обычному методу, а не к entry point.
По исходному коду данный метод должен быть синхронизированным, т.е. в конкретный момент времени он должен выполняться только одним потоком, в противном случае при одновременном доступе из несколькоих потоков содержимое файла может быть повреждено. И авторы кода думали что использование атрибута STAThread приведет к такому поведению. Однако это не будет работать.
Если нужна синхронизировать данный метод малой кровью, то нужно применить к нему атрибут [MethodImpl(MethodImplOptions.Synchronized)]. (Тогда одновременно только один поток будет выполнять этот метод, а остальные потоки, тоже вызвавшие этот метод будут залочены пока первый не выйдет из него) Но лучше было бы сделать это вручную через оператор lock.
Если все же нужно применить атрибут STAThread, то в ASP.NET для этого используется директива @Page c атрибутом AspCompat.

Вот такая вот моя имха. Если ошибся — извините.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.