окно сообщения С# показать, а затем изящно закрыть после процесса?

В настоящее время у меня есть форма, которую я использую. Когда пользователь нажимает кнопку экспорта, он экспортирует некоторые данные на лист Excel. У меня процесс происходит в фоновом режиме, и он визуально не показывает пользователю рабочий лист excel во время записи, но делает это после.

В форме c#, когда они нажимают для экспорта, я отключаю форму, чтобы они не могли на ней ничего нажимать. Я хотел бы, чтобы было окно сообщения или какой-то тост/индикатор того, что excel пишет, и когда excel закончен, окно сообщения/тост/индикатор закрывается и позволяет пользователю продолжить.

В тот момент, когда форма отключена, в excel записывается форма, затем она снова включается. У меня появляется окно сообщения с использованием MessageBox.Show("text");, но на самом деле оно не такое элегантное и выглядит дрянным.

Кто-нибудь делал что-то подобное и мог указать мне правильное направление.

Спасибо, Дж.


person Jordan Atkinson    schedule 30.12.2014    source источник
comment
Это может помочь вам начать работу, если вы ищете тост: codeproject.com/Articles/442983/   -  person DoctorMick    schedule 30.12.2014
comment
@Rahul, я посмотрю на это, спасибо!   -  person Jordan Atkinson    schedule 30.12.2014
comment
Ну, я не опубликовал ни одного комментария или ответа. Пожалуйста, поблагодарите @DoctorMick. И что я предполагаю из вашего вопроса, так это то, что вы хотите показать прогресс, который пишет Excel. Вы можете показать прогресс в строке состояния. Поскольку ваша форма делает только одну вещь, то есть пишет в Excel, нет смысла делать несколько потоков. Просто покажите прогресс, например, 10 % завершения, 20 % завершения... в строке состояния.   -  person Rahul Vishwakarma    schedule 30.12.2014
comment
Ах, извините, я не заметил, что вы были правкой, а не предложением. В любом случае спасибо за редактирование, и спасибо @DoctorMick за предложение :)   -  person Jordan Atkinson    schedule 30.12.2014


Ответы (4)


Вы можете добавить что-то вроде StatusBar внизу формы вместо MessageBox. Когда начинается экспорт, вы можете показать информацию на метке в этой строке состояния и удалить ее, когда экспорт завершится. Кроме того, вы можете добавить в эту строку состояния индикатор выполнения, который показывает статус выполнения экспорта.

person khlr    schedule 30.12.2014
comment
Это определенно звучит лучше, чем окно сообщения! - person Jordan Atkinson; 30.12.2014

Я предполагаю, что процесс, который вы запускаете, находится в потоке пользовательского интерфейса, а не в отдельном процессе (отдельном приложении)?

Вы должны следить за этим. Сначала вы показываете MessageBox или другое диалоговое окно (вы можете использовать форму собственного дизайна). Затем вы можете использовать класс BackgroundWorker/Thread для инициализации трудоемкой работы. Таким образом, поток пользовательского интерфейса не будет заблокирован. Наконец, когда работа сделана, вы закрываете диалог.

person msporek    schedule 30.12.2014
comment
Привет, @msporek. Процесс выполняется в Excel, я не беспокоюсь о блокировке пользовательского интерфейса, и на самом деле мне нужно его отключить, чтобы пользователь не мог изменить список, в котором находятся записанные данные. У меня появилось окно сообщения, за которым последовал Microsoft Excel, работающий в фоновом режиме, и моя система сообщила ему, что писать, а затем, когда оно закончилось, просто появилось перед пользователем. Пользователь щелкает окно сообщения, когда оно появляется, а затем просто сидит отключенная/включенная форма, в зависимости от того, насколько медленно/быстро щелкает окно сообщения OK. Я бы предпочел, чтобы повсюду появлялась рамка, закрывающаяся в конце. - person Jordan Atkinson; 30.12.2014
comment
Если вы запускаете его как внешний процесс, то вы, вероятно, используете класс Process для вызова операции Excel, верно? Если это так, вы можете использовать Process.WaitForExit(), чтобы дождаться завершения процесса. Посмотрите здесь: msdn.microsoft.com/pl -pl/library/fb4aw7b8%28v=vs.110%29.aspx - person msporek; 30.12.2014

Если вы не знаете, сколько времени это займет, используйте счетчик ожидания/прогресса, возможно, в сочетании со счетчиком строк, который увеличивается для каждой строки или партии из 1000 строк в зависимости от объемов. Таким образом, пользователь может увидеть, что он не завис, и, надеюсь, ему следует терпеливо дождаться его завершения.

См. этот пост: спиннер загрузки wpf

person Murray Foxcroft    schedule 30.12.2014

Спасибо за вашу помощь,

В конце концов мне удалось выработать себя, используя индикатор выполнения в формах выигрыша, который увеличивается по мере записи, чтобы преуспеть в моей системе, текущая строка в excel, в которую он записывает, - это значение на индикаторе выполнения, после его завершения, панель заполнено, и я прячу бар :)

J

person Jordan Atkinson    schedule 30.12.2014