C # Winforms Потоки: закрытая форма вызывает

Следующий код демонстрирует мою дилемму. Код создает фоновый поток, который что-то обрабатывает, а затем вызывает поток пользовательского интерфейса с результатом.

Он может вызвать исключение, если фоновый поток вызывает Invoke в форме после закрытия формы. Он проверяет IsHandleCreated перед вызовом Invoke, но форма может закрыться после проверки.

void MyMethod()
{
    // Define background thread
    Action action = new Action(
        () =>
        {
            // Process something
            var data = BackgroundProcess();

            // Try to ensure the form still exists and hope
            // that doesn't change before Invoke is called
            if (!IsHandleCreated)
                return;

            // Send data to UI thread for processing
            Invoke(new MethodInvoker(
                () =>
                {
                    UpdateUI(data);
                }));
        });

    // Queue background thread for execution
    action.BeginInvoke();
}

Одним из решений может быть синхронизация FormClosing и каждого вызова Invoke, но это звучит не очень элегантно. По умолчанию я имею в виду стиль, который мы используем с помощью blend.

Как сделать ориентацию элементов списка горизонтальной в стилизации списка по умолчанию. По умолчанию я имею в виду стиль, который мы используем, используя blend.

15
задан Malcolm 25 August 2010 в 13:17
поделиться

1 ответ

Используйте свойство ItemsPanel , чтобы заменить панель горизонтальной StackPanel:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

Если вы хотите сделать это в стиле, просто добавьте Setter, который устанавливает ItemsPanel недвижимость:

<Style TargetType="ListBox">
    <!-- Rest of the style -->
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
</Style>
30
ответ дан 1 December 2019 в 02:09
поделиться
Другие вопросы по тегам:

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