Ребята. Мне нужно отменить BakgroundWorker из основной формы, которая была запущена в другой форме. Я пытаюсь решить эту проблему с помощью делегатов. Возможно есть другие пути решения? Подскажите пожалуйста! Привожу для примера код главной формы:
public partial class MainForm : Form
{
public MainForm(string FIO)
{
//some code
}
public event EventHandler<EventArgs> Canceled;
private void Button5_Click(object sender, EventArgs e)
{
if (Canceled != null)
Canceled(sender, e);
}
}
Код формы, в которой был запущен backgroundWorker
public partial class CarriageForm : Form
{
public CarriageForm(ToolStripProgressBar toolStripProgressBar1, ToolStripLabel toolStripLabel1)
{
//some code
}
private void CarriageForm_Load(object sender, EventArgs e)
{
progBar.Visible = false;
if (!backgroundWorker1.IsBusy)
{
progBar.Visible = true;
progBar.Maximum = GetTotalRecords();
string GetCarriage = "Select dc.ID, dc.CarNumber [Номер вагона],dc.AXIS [Осность],do.ID [OwnerID], do.Name [Собственник],do.FullName [Собственник полное наименование] From d__Carriage dc Left Join d__Owner do on do.ID = dc.Owner_ID";
MainForm mainForm = new MainForm(null);
mainForm.Canceled += new EventHandler<EventArgs>(Button2_Click);
backgroundWorker1.RunWorkerAsync(GetCarriage);
}
//BackgroundWorker1_DoWork...
//BackgroundWorker1_ProgressChanged...
//BackgroundWorker1_RunWorkerCompleted..
public void Button2_Click(object sender, EventArgs e)
{
if (backgroundWorker1.WorkerSupportsCancellation == true)
{
// Stop the Background Thread execution
Application.UseWaitCursor = false;
System.Windows.Forms.Cursor.Current = Cursors.Default;
backgroundWorker1.CancelAsync();
progBar.Value = 0;
progBar.Visible = false;
TlStpLabel.Text = "Пользователь умышленно отменил";
}
}
}
Для наглядности
Для BW
второй формы нужно выставить Modifiers
в Public
При запуске второй формы получаем ссылку на BW, и используем эту ссылку для отмены работы.
public partial class Form1 : Form
{
//для ссылки на Bw второго окна
private BackgroundWorker _bw;
public Form1()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
this.Text = "Первая форма";
_buttonOpenForm.Click += ButtonOpenForm_Click;
_buttonStopBgW.Click += ButtonStopBgW_Click;
}
private void ButtonOpenForm_Click(object sender, EventArgs e)
{
var form2 = new Form2();
form2.Owner = this;
//передаем ссылку на Bw
_bw = form2._backgroundWorker;
form2.Show();
}
private void ButtonStopBgW_Click(object sender, EventArgs e)
{
//проверяем, что Bw есть и что он работает
//тогда отменяем
if (_bw != null && _bw.IsBusy) _bw.CancelAsync();
}
}
Можно создать вспомогательный сервис, который будет содержать все методы по работе с воркерами, создавать новые отменять старые и тд. Если хочется проще, то сделать переменную воркера публичной, и пошарить ссылку на дочернюю форму с главной. То есть в коде главной форме обратится к дочерней, и ее воркеру.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Открыл исходник одного из компонента WinForms и увидел это:
в столбце "отправитель" и "получатель" встречаются одинаковые фамилии (когда перевод осуществляется родственникуНапример:
После нажатия на кнопку, происходит редирект на страницу "Заказ принят", а не на liqpay
собираюсь писать плагин для Wordpress хочу для своей работы использовать фреймворк Lumen, но как правильно его использовать в обход классического...