csharpdeeb25a2 | 1 | namespace CascadeIDE.Contracts; |
| 2 | |
| 3 | /// <summary> |
| 4 | /// Логика сознательно переводит выполнение на UI-поток или UI-scheduler (напр. <c>UiScheduler.Post/InvokeAsync</c>, <c>Dispatcher</c>). |
| 5 | /// </summary> |
| 6 | /// <remarks> |
| 7 | /// Маркер для точек, где неверный поток даёт гонки или исключения Avalonia. Не вешать на весь ViewModel «на всякий случай» — |
| 8 | /// только на узкие хелперы оркестрации UI. |
| 9 | /// |
| 10 | /// Поиск: <c>[UiThreadMarshal]</c>. |
| 11 | /// </remarks> |
| 12 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method, |
| 13 | Inherited = false, |
| 14 | AllowMultiple = false)] |
| 15 | public sealed class UiThreadMarshalAttribute : Attribute |
| 16 | { |
| 17 | public UiThreadMarshalAttribute() |
| 18 | { |
| 19 | } |
| 20 | |
| 21 | public UiThreadMarshalAttribute(string note) => Note = note; |
| 22 | |
| 23 | public string? Note { get; } |
| 24 | } |
| 25 | |
View only · write via MCP/CIDE