powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Закрытие ShowDialog
6 сообщений из 6, страница 1 из 1
Закрытие ShowDialog
    #38950550
Wrun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Подключен считыватель карт по COM порту (SerialPort).

Подношу карту. и в основной форме прослушка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
private void RFID_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
	this.Invoke(new EventHandler(RFID_DataReceivedInvoke));
}
private void RFID_DataReceivedInvoke(object s, EventArgs e)
{
	String RFID_Msg = "";
	Boolean RFID_While = true;
	while (RFID_While)
	{
		try
		{
			RFID_Msg += RFID.ReadLine();
		}
		catch (TimeoutException) { }
		finally
		{
			RFID_While = false;
		}
	}
	RFID_Msg = RFID_Msg.Trim();
	//
	SecondFormH.ShowDialog();
}



Но я бы хотел иметь возможность Закрывать (переоткрывать) SecondForm при поднесении другой карты.

А на данный момент получается что основная форма "подвисает" из-за ShowDialog.
А мне нужно именно модальное поведение окна

Как это организовать?
...
Рейтинг: 0 / 0
Закрытие ShowDialog
    #38950574
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо бы определиться, если нужно именно модальное, то есть ничего кроме него - то вы его имеете.
Если нужно все-таки не модальное, то делайте не модальное, типа Show с прибамбасами.
...
Рейтинг: 0 / 0
Закрытие ShowDialog
    #38950615
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wrun,
Код: c#
1.
2.
3.
4.
5.
6.
private void RFID_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
  var sf = Application.OpenForms.OfType<SecondFormH>().FirstOrDefault();
  if (sf!=null)
    Invoke((Action)(()=>sf.Close())); // или sf.Hide();
  ....


подумайте о синхронизации самого тела метода - чтобы на два быстрых поднесения карты у вас не было попытки дважды закрыть одну и ту же форму.
...
Рейтинг: 0 / 0
Закрытие ShowDialog
    #38950623
Wrun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Winnipuh,

Ну мне нужно поведение для пользователя как модальное, т.е. не допустима работа с основным окном.

Но в то же время переоткрытие по разным картам тоже должно быть...
...
Рейтинг: 0 / 0
Закрытие ShowDialog
    #38950625
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wrun,

у вас RFID_DataReceived работает не в основном (GUI) потоке, иначе не понадобился бы Invoke для окрытия модальной формы. А поскольку поток не основной, то ему пофигу на модальная там форма в главном потоке, или нет. Главное - продумать синхронизацию. У меня была аналогичная ситуация со сканнером штрих-кодов - всё работало нормально.
...
Рейтинг: 0 / 0
Закрытие ShowDialog
    #38950772
Wrun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,

Так вот в этом как то и проблема, не могу понять как организовать, пробовал:

Код: c#
1.
2.
3.
4.
if (RFID_Msg != "No card")
	this.Invoke(new Action(() => OpenPersForm()));
else
	this.Invoke(new Action(() => ClosePersForm()));



Но то же висит ждет...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Закрытие ShowDialog
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]