也许这是一个愚蠢的问题,我对线程不是很有经验。我有加密和解密文件的程序。当我单击按钮时,将创建从列表框中使用的文件列表,设置来自folderbrowser对话框的目标文件夹,而不是代码正在启动线程。 我正在调试程序,我期待异常,当我解密大文件时,在第一个任务结束之前我开始新的解密。 但令我惊讶的是,两个任务同时运行,没有错误结束。 所以问题是:可能或这种行为会导致一些问题吗? 我可以在之前的实例之前以相同的名称结束使用相同名称的线程吗? 基本上我在第一个任务(解密大文件)结束之前再次点击button1。
private void button1_Click(object sender, EventArgs e)
{
try
{
List<string> seznamToDecrypt = new List<string>();
string targetPath = "";
DialogResult result2 = folderBrowserDialog2.ShowDialog();
if (result2 == DialogResult.OK)
{
targetPath = folderBrowserDialog2.SelectedPath;
foreach (var item in listBox1.SelectedItems)
{
seznamToDecrypt.Add(item.ToString());
}
Thread t2 = new Thread(() => decryptFiles(seznamToDecrypt, folderBrowserDialog2.SelectedPath,listPathForEdit));
t2.IsBackground = true;
t2.SetApartmentState(ApartmentState.STA);
t2.Start();
答案 0 :(得分:0)
是的,这可能会导致问题,是的,一旦旧线程结束,就可以开始一个新线程,但你可能不想这样做。
您可以做一些事情。一个是开始Task
而不是开始一个线程。任务将在其自己的线程上运行,但该线程将由系统管理。
可以取消任务(在您的帮助下),因此您可以取消任务并在用户取消操作时启动新任务。任务也可以使用Task.ContinueWith
进行链接,但我不认为它适用于您的情况 - 只需取消第一堂课并开始第二堂课。