Вы обычно хотите проигнорировать SIGPIPE
и обработать ошибку непосредственно в Вашем коде. Это вызвано тем, что обработчики сигналов в C имеют много ограничений на то, что они могут сделать.
самый портативный способ сделать это должно установить SIGPIPE
обработчик к SIG_IGN
. Это будет препятствовать любому сокету или передавать запись по каналу вызвать SIGPIPE
сигнал.
Для игнорирования эти SIGPIPE
сигнал используйте следующий код:
signal(SIGPIPE, SIG_IGN);
, Если Вы используете эти send()
вызов, другая опция состоит в том, чтобы использовать MSG_NOSIGNAL
опция, которая выключит SIGPIPE
поведение на на основание вызова. Обратите внимание, что не все операционные системы поддерживают эти MSG_NOSIGNAL
флаг.
Наконец, можно также хотеть рассмотреть SO_SIGNOPIPE
флаг сокета, который может быть установлен с [1 111] в некоторых операционных системах. Это предотвратит SIGPIPE
от того, чтобы быть вызванным записями только к сокетам, на которых это установлено.
Что вам нужно, так это ListView, который использует WrapPanel для размещения всех элементов.
<ListView ItemsSource={...}>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<!-- Fill in how you want each item to look here -->
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Используйте ItemsControl, и установите для него ItemsPanel значение WrapPanel:
<ItemsControl ItemsSource="{Binding Something}" ItemTemplate="{StaticResource YourDataTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>