Каковы риски использования формы без запуска насоса сообщений для потока?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Каковы риски использования формы без запуска насоса сообщений для потока?

Сообщение Anonymous »

У меня есть сторонний элемент управления 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Каковы риски запуска экземпляра IHost и экземпляра WebApplication в одном процессе .NET?
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Каковы риски запуска экземпляра IHost и экземпляра WebApplication в одном процессе .NET?
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Каковы риски запуска sudo pip?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Почему в окне консоли нет насоса сообщений?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Каковы риски безопасности при обнародовании команды java.lang.Runtime.exec (строковая команда)
    Anonymous » » в форуме JAVA
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»