Диспетчер WPF. Вызовите 'зависание'

Просто для удовольствия, вот еще одно решение, которое позволяет избежать оператора switch.

var map = new[] {
    new { Value = "4100", StartsWith = false, Result="ABC" },
    new { Value = "4101", StartsWith = false, Result="ABC" },
    new { Value = "4102", StartsWith = false, Result="ABC" },
    new { Value = "4200", StartsWith = false, Result="ABC" },
    new { Value = "600A", StartsWith = false, Result="XWZ" },
    new { Value = "3*", StartsWith = true, Result="123" },
    new { Value = "03*", StartsWith = true, Result="123" },
};

var subarea = ... whatever ...;

var result = map.Where(e =>
        {
            if (e.StartsWith)
            {
                return subarea.StartsWith(e.Value);
            }
            else
            {
                return subarea == e.Value;
            }
        }
    )
    .Select(e => e.Result)
    .FirstOrDefault() ?? "ABCXZ123";

Порядок в массиве map определяет приоритет, так что, например, вы можете иметь точное соответствие на, скажем, «3 * 11», а также совпадение StartsWith на «3 *», например:

var map = new[] {
    new { Value = "3*11", StartsWith = false, Result="ABC" },
    new { Value = "4100", StartsWith = false, Result="ABC" },
    new { Value = "4101", StartsWith = false, Result="ABC" },
    new { Value = "4102", StartsWith = false, Result="ABC" },
    new { Value = "4200", StartsWith = false, Result="ABC" },
    new { Value = "600A", StartsWith = false, Result="XWZ" },
    new { Value = "3*", StartsWith = true, Result="123" },
    new { Value = "03*", StartsWith = true, Result="123" },
};
21
задан Matthew Savage 10 November 2008 в 23:58
поделиться

3 ответа

Вы говорите создание нового потока STA диспетчер на этом выполнении нового потока?

Я добираюсь от "этого. Диспетчер. Поток! = Поток. CurrentThread", что Вы ожидаете, что это будет другим диспетчером. Удостоверьтесь что его выполнение иначе это процесс привычки его очередь.

5
ответ дан 29 November 2019 в 21:28
поделиться

Вызовите синхронно - Вы хотите Диспетчера. BeginInvoke. Кроме того, я полагаю, что Ваш пример кода "еще" должен переместить "SetValue" в оператор.

10
ответ дан 29 November 2019 в 21:28
поделиться

Это походит на мертвую блокировку; это обычно происходило бы, если бы поток, звоня.Invoke уже содержал блокировку / взаимное исключение / и т.д., который должен завершить поток UI, это - работа. Самый простой подход должен был бы использовать BeginInvoke вместо этого: тем путем текущий поток может продолжать бежать и (по-видимому) выпустит блокировку вскоре - разрешение UI к aquire это. С другой стороны, если можно определить незаконную блокировку, Вы могли бы сознательно выпустить ее на время.

2
ответ дан 29 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: