Мне нужно позвонить ShowDialog()
на моем Form
без фактического отображения диалогового окна (держите Visible
на false
). К сожалению, нет никакого события VisibleChanged
, как есть в полной структуре. Я также не могу переопределить свойство Visible
. Самое близкое, что я могу придумать, это переопределить OnLoad
и вызвать Hide
в новом потоке (так как видимость формы устанавливается после ее загрузки). Это, очевидно, сумасшедший хак (не говоря уже о том, что выглядит очень плохо, поскольку вы можете видеть форму, которая нарисована, а затем скрыта на экране), но я действительно не могу понять, как это сделать. Есть идеи?Вызов ShowDialog() без фактического отображения формы
Редактировать: Мне нужно позвонить ShowDialog()
, потому что я работаю с ошибкой сторонней библиотеки, которая работает только при вызове в форме, подобной этой, и по моему сценарию у меня нет необходимости или желания какого-либо интерфейса. Я подтвердил ошибку с третьей стороной, но в настоящее время у них нет ресурсов для исправления проблемы, поэтому я застрял с каким-то безумным обходным решением.
Edit2: Вот некоторые более конкретные информацию о моей проблеме:
Это работает:
MyForm_OnLoad(...)
{
thirdPartyLib.StartUp(MyCallback);
}
private void MyCallback(...)
{
// Do some work with the data passed in.
}
Это не:
public static void Main()
{
thirdPartyLib.StartUp(MyCallback);
// Sleep for a bit to allow the library to fire the callback.
// Normally, the callback is triggered several times a second.
Thread.Sleep(20000);
}
private void MyCallback(...)
{
// This callback is never invoked by the library.
}
Таким образом, единственный способ, которым я могу получить вещи работать является использование библиотеки в Form
. К сожалению, я не хочу отображать форму в своем приложении, поэтому я пытаюсь использовать форму, чтобы успокоить библиотеку, но не отображать что-либо для моего приложения. Я открыт для предложений.
Обратите внимание, что компактный API-интерфейс winforms API не поддерживает непрозрачность и не имеет события OnShown
(а не VisibleChanged
).
Редактировать 3: Извините, ребята, я не собираюсь расплыться в ясности. Я просто не хотел заблудиться в деталях, которые не казались релевантными. Третья библиотека захватывает изображения с специальной камеры, подключенной через USB. Функция обратного вызова запускается с несколькими различными параметрами для указания текущего состояния и данных изображения с камеры.
Можете ли вы объяснить, почему вам нужно позвонить ShowDialog без него показывает? Возможно, кому-то будет полезно дать вам альтернативный подход. – msergeant
@msergeant согласился. Кажется, что есть основная проблема, которую вы пытаетесь решить, и это одно решение.Но может быть что-то лучше, потому что весь смысл того, что что-то показывать в диалоговом режиме, так это то, что они ничего не могут сделать. – spinon
Да. Вместо того, чтобы сообщать нам, как вы решили решить проблему (что почти наверняка неправильно), расскажите нам, какова фактическая проблема, которую вы пытаетесь решить. – ctacke