我想启动/停止一个线程,以便不阻塞UI使用按钮
public partial class Program_Form : Form
{
readonly BackgroundWorker m_oWorker;
[STAThread]
private void Program_Form_Load(object sender, EventArgs e)
{
// long code here
}
private async void DGW6BtnPrint_Click(object sender, EventArgs e)
{
Work.Printer_ Print = new Work.Printer_();
await Task.Run(() =>
{
Print.Print_File(this, dataGridView6, StatusText, progressBar1,
variablesStatus);
});
}
public void BTN6PPauza_Click(object sender, EventArgs e)
{
//What i had tried
//_canceller.Dispose();
//_canceller.Cancel();
// variablesStatus = false;
//thread2.break;
//autoResetEvent.WaitOne();
//thread2.Join();
//_manualResetEvent.Reset();
//thread2.Abort();
//_pauseEvent.Reset();
//variablesStatus = "Pause";
//Print_Actions();
}
}
字符串
引用类:
namespace OfficeTools.Work
{
class Printer_
{
public void Print_File(Program_Form callForm, DataGridView DGW,
TextBox Status, ProgressBar Progress, bool variablesStatus)
{
foreach (DataGridViewRow Row in DGW.Rows)
{
file = DGW.Rows[Row.Index].Cells[4].Value.ToString();
PrintFiles.Print_Word(file);
}
}
}
}
型
我怎么能开始停止暂停恢复线程,因为没有工作,从我已经尝试过,我认为问题是从foreach
循环我从来没有使用过线程,我找不到一个例子类似于我的,以了解我应该怎么做。
2条答案
按热度按时间lndjwyie1#
我做了这个工作,我不知道这是否是正确的方式,但目前它的工作
字符串
引用类:
型
亲切问候所有
kadbb4592#
你的问题暗示你想使用
Thread.Suspend
和Thread.Resume
方法。可能像这样:字符串
这两种方法的文档包括几个不鼓励使用的警告:
Thread.Suspend
已被弃用。使用System.Threading
中的其他类,如Monitor
、Mutex
、Event
和Semaphore
,以同步线程或保护资源。不要使用
Suspend
和Resume
方法来同步线程的活动。挂起线程时,您无法知道线程正在执行什么代码。如果在安全权限评估期间挂起持有锁的线程,则AppDomain
中的其他线程可能会被阻塞。如果在线程执行类构造函数时挂起线程,AppDomain
中的其他线程试图使用该类时会被阻塞。2死锁很容易发生。如果你想接受这些风险,那由你决定。如果你问我,你不应该。
注意:.NET Core和更高版本的平台不支持
Suspend
和Resume
方法。在这些平台上,它们会引发PlatformNotSupportedException
异常。仅当您针对.NET Framework平台时才可以使用它们。