C# 继承问题
我创建了一个类:C# 继承问题,c#,winforms,inheritance,C#,Winforms,Inheritance,我创建了一个类: public class AbortableBackgroundWorker : BackgroundWorker { private Thread workerThread; protected override void OnDoWork(DoWorkEventArgs e) { workerThread = Thread.CurrentThread; try { base.
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;
}
}
}
以下是我如何使用它:
backgroundWorker1 = new AbortableBackgroundWorker();
//...
backgroundWorker1.RunWorkerAsync();
if (backgroundWorker1.IsBusy == true)
{
backgroundWorker1.Abort();//This method is unavailable :(
backgroundWorker1.Dispose();
}
另一个小问题..此代码是否会取消backgroundworker?此方法不可用,因为backgroundWorker1的静态类型是backgroundworker。你需要
AbortableBackgroundWorker backgroundWorker1 = new AbortableBackgroundWorker();
否则,您将不得不使用cast或as AbortableBackgroundWorker向下转换该方法不可用,因为backgroundWorker1的静态类型是BackgroundWorker。你需要
AbortableBackgroundWorker backgroundWorker1 = new AbortableBackgroundWorker();
否则,您将不得不对其进行向下转换,无论是使用cast还是AbortableBackgroundWorker,这都不是中止BackgroundWorker任务的正确方法。。。请改用方法和属性。您几乎不应该中止线程,至少当您可以干净地退出此线程时是如此。中止BackgroundWorker任务不是正确的方法。。。请改用方法和属性。您几乎不应该中止线程,至少当您可以干净地退出此线程时是这样。为什么您从BackgroundWorker继承并创建自己的线程?您创建的AbortableBackgroundWorker是什么类型的?看起来您可能正在以BackgroundWorker类型创建它。我正在寻找一种中止它的方法!!为什么您从BackgroundWorker继承并创建自己的线程?您创建的AbortableBackgroundWorker是什么类型的?看起来您可能正在以BackgroundWorker类型创建它。我正在寻找一种中止它的方法@Dmitry:IsBusy应该是可用的。。。这是一个公共bool只读属性,因此它被成功继承。请回答我的第二个问题,上面的代码是否会成功中止backgroundworker@DmitryMakovetskiyd-所有可中止的BackgroundWorker是一个BackgroundWorker。并非所有BackgroundWorker都是AbortableBackgroundWorker,您的代码只会中止AbortableBackgroundWorker。当然,这并不能解决整个设计都有缺陷这一事实,如果你真的使用它,那将是一个傻瓜。@Dmitry:IsBusy应该是可用的。。。这是一个公共bool只读属性,因此它被成功继承。请回答我的第二个问题,上面的代码是否会成功中止backgroundworker@DmitryMakovetskiyd-所有可中止的BackgroundWorker是一个BackgroundWorker。并非所有BackgroundWorker都是AbortableBackgroundWorker,您的代码只会中止AbortableBackgroundWorker。当然,这并不能解决整个设计都有缺陷的问题,如果你真的使用它,那将是一个傻瓜。