У меня есть сторонний элемент управления WinForms, который мне нужно использовать для визуализации и сохранения данных в виде изображений. На самом деле мне не нужно видеть форму на экране, мне просто нужно, чтобы она существовала. В настоящее время я просто создаю новый поток, устанавливаю для него значение STA, а затем создаю форму в потоке (и перемещаю форму за пределы экрана, потому что я не хочу ее видеть). Затем поток блокируется в цикле, где он иногда выбирает элементы для рендеринга из BlockingCollection
Согласно этому ответу я должен начать сообщение цикл, используя Application.Run(form) в этом потоке, и мне также не следует блокировать этот поток. Мой код нарушает оба этих принципа.
По результатам моего ограниченного тестирования я не вижу никаких проблем в своем подходе, но мне не хватает глубины понимания, чтобы предвидеть здесь потенциальные проблемы.
private static void ProcessQueue()
{
// This function gets passed in the Thread ctor
Debug.Assert(Thread.CurrentThread.GetApartmentState() == ApartmentState.STA);
var form = new Form()
{
ShowInTaskbar = false,
Height = 800,
Width = 800,
FormBorderStyle = FormBorderStyle.None,
MaximizeBox = false,
MinimizeBox = false,
Text = "Graphics helper window"
};
var display = new MyThirdPartyActiveXDisplay();
form.Controls.Add(display);
display.Dock = DockStyle.Fill;
form.Show();
form.Top = -2000;
form.Left = -2000;
while (!SaveQueue.IsCompleted)
{
var item = SaveQueue.Take();
var image = display.render(item.value)
item.SetResult(image); // This uses a TaskCompletionSource under the hood to pass the result to the caller that added the item to the queue
}
}
What potential risks should I look for with this approach? Why is it recommended to start a message pump and not block an STAThread?
Подробнее здесь: https://stackoverflow.com/questions/788 ... or-a-threa
Каковы риски использования формы без запуска насоса сообщений для потока? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Каковы риски запуска экземпляра IHost и экземпляра WebApplication в одном процессе .NET?
Anonymous » » в форуме C# - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Каковы риски запуска экземпляра IHost и экземпляра WebApplication в одном процессе .NET?
Anonymous » » в форуме C# - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-