Я использую XslCompiledTransform
для преобразования XML-файла в HTML.Файл XML не такой короткий, поэтому преобразование тратит много времени.
Мой код:
xslTransform.Transform(fi.FullName, TMP_TRANSFORMED_XML_PATH);
webBrowser1.Navigate(TMP_TRANSFORMED_XML_PATH);
Поэтому я хочу использовать индикатор выполнения или (лучше) значок прогресса (диалоговое окно?) которая не связана с формой.
Проблема в том, что у меня есть две формы.Первый имеет список элементов и кнопку, когда элемент выбран и кнопка нажата, отображается вторая форма (не модальная), файл XML преобразуется и отображается в элементе управления WebBrowser.
Во втором конструкторе формы я вызываю XslCompiledTransform.Load
, инициализирую элементы управления и затем вызываю XslCompiledTransform.Transform()
.
Во второй форме у меня также есть кнопки для навигации между элементами списка 1-й формы.Поэтому, когда я нажимаю «>», выбирается следующий элемент из 1-й формы, и элементы 2-й формы перезагружаются - например, изменяется некоторый текст, и снова вызывается XslCompiledTransform.Transform () для нового файла XML.1017 * Итак, как организовать индикатор выполнения при загрузке 2-й формы каждый раз?
Из 1-й формы:
private void OpenSecondForm()
{
if (formTwo == null)
{
formTwo = new FormTwo(this, culture, params);
formTwo .Show();
}
else
{
if (formTwo .IsDisposed)
{
formTwo = new FormTwo(this, culture, params);
formTwo .Show();
}
else
{
formTwo .Reinitialaze(culture, invoice);
}
formTwo .BringToFront();
}
}
public void SelectRow(int moveTo)
{
try
{
/*navigate on list here */
/* ... */
OpenSecondForm();
}
catch (Exception e)
{ MessageBox.Show(e.Message, "ERROR"); }
}
2-я форма:
public FormTwo(Form parent, CultureInfo cultr, string params)
{
culture = cultr;
parentForm = parent;
rm = new ResourceManager("MyProject.Resource", typeof(FormOne).Assembly);
InitializeComponent();
xslTransform = new XslCompiledTransform();
xslTransform.Load(XSL_TRANSFORM_SCHEMA_NAME);
ReInitialazeAll();
}
internal void Reinitialaze(CultureInfo cultr, string params)
{
culture = cultr;
ReInitialazeAll();
}
private void ReInitialazeAll()
{
SelectDatabaseData();
InitCaptions();
InitForms();
}
private void InitForms()
{
EnableDisableButtons();
webBrowser1.DocumentText = "<HTML><BODY></BODY></HTML>";
FillXmlData();
}
private void FillXmlData()
{
xslTransform.Transform(fi.FullName, TMP_TRANSFORMED_XML_PATH);
webBrowser1.Navigate(TMP_TRANSFORMED_XML_PATH);
}
Я пытался создать поток для выполнения этих FillXmlData.Но мои формы все еще недоступны, пока xml трансформируется.