У меня проблема с реализацией кода, который я получил от stackowerflow, о том, что он убил процесс backgroundworker.C# backgroundworker и partial class
Мой код выглядит следующим образом:
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using GluthGUI.Classes.XMLprofile;
using System.Xml.Linq;
using System.ComponentModel;
namespace Solution
{
partial class SolGUI : Form
{
private void startButton_Click(object sender, EventArgs e)
{
backgroundWorker1 = new AbortableBackgroundWorker();
if (startButton.Text == "Start")
{
XMLParsing();
DisableTextFields();
backgroundWorker1.RunWorkerAsync();
startButton.Text = "Stop";
}
else if (startButton.Text == "Stop")
{
if (backgroundWorker1.IsBusy == true)
{
backgroundWorker1.Abort(); //error Abort() is not declared?!?!
backgroundWorker1.Dispose();
}
startButton.Text = "Start";
DisableTextFields();
}
}
}
Это частичный класс, который бы прекратить BackgroundWorker:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Threading;
namespace Solution
{
public class AbortableBackgroundWorker : BackgroundWorker
{
private Thread workerThread;
protected override void OnDoWork(DoWorkEventArgs e)
{
workerThread = Thread.CurrentThread;
try
{
base.OnDoWork(e);
}
catch (ThreadAbortException)
{
e.Cancel = true; //We must set Cancel property to true!
Thread.ResetAbort(); //Prevents ThreadAbortException propagation
}
}
public void Abort()
{
if (workerThread != null)
{
workerThread.Abort();
workerThread = null;
}
}
}
}
Моя проблема заключается в том, что Abort() метод частичного класса не видно в других классы с одинаковым пространством имен.
вам действительно нужно использовать Прервать ли? Это не рекомендуется в большинстве ситуаций. Вместо этого используйте переменную или CancellationToken. – Robert
Работает ли он, если вы используете AbortableBackgroundWorker в не-частичном классе? – Hamed
Где (и как) определяется 'backgroundWorker1'? Является ли тип «AbortableBackgroundWorker»? Также он никогда не будет занят, поскольку вы каждый раз создаете новый экземпляр, чтобы никогда не было ничего, чтобы прервать его. – musefan