- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 c# 代码来显示进度条:
{
public partial class FormPesquisaFotos : Form
{
public FormPesquisaFotos()
{
InitializeComponent();
}
private void FormPesquisaFotos_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
//Mostra a barra de progresso da pesquisa
while (progressBar1.Value < 100)
progressBar1.Value += 1;
{
//Criar um objeto (instância, cópia) da classe FormResultadosFotos
FormResultadosFotos NovoForm = new FormResultadosFotos();
NovoForm.Show();
}
}
}
}
它仅在搜索结束时加载(单击按钮后)。如何让进度条在搜索开始时运行?
这是在新表单上显示结果的代码。进度条在 95% 处停止,几秒钟后显示结果。
{
public partial class FormResultadosFotos : Form
{
public FormResultadosFotos()
{
InitializeComponent();
}
private void FormFotos_Load(object sender, EventArgs e)
{
// se pretendermos pesquisar em várias pastas
List<string> diretorios = new List<string>()
{@"\\Server\folder01\folder02"};
// se pretendermos pesquisar as várias extensões
List<string> extensoes = new List<string>()
{".jpg",".bmp",".png",".tiff",".gif"};
DataTable table = new DataTable();
table.Columns.Add("Nome e formato do ficheiro (duplo clique para visualizar a imagem)");
table.Columns.Add("Caminho ( pode ser copiado Ctrl+C )");
foreach (string diretorio in diretorios)
{
var ficheiros = Directory.EnumerateFiles(diretorio, "*", SearchOption.AllDirectories).
Where(r => extensoes.Contains(Path.GetExtension(r.ToLower())));
foreach (var ficheiro in ficheiros)
{
DataRow row = table.NewRow();
row[0] = Path.GetFileName(ficheiro);
row[1] = ficheiro;
table.Rows.Add(row);
}
}
dataGridView1.DataSource = table;
dataGridView1.Columns[1].Visible = true;
}
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
FormPictureBox myForm = new FormPictureBox();
string imageName = dataGridView1.CurrentRow.Cells[1].Value.ToString();
Image img;
img = Image.FromFile(imageName);
myForm.pictureBox1.Image = img;
myForm.ShowDialog();
}
}
}
谢谢。
最佳答案
你必须在新线程上而不是在主线程上。
这是一个小例子:
private void buttonWorkerTest_Click(object sender, RoutedEventArgs e)
{
this.progressBarWorkerTest.Value = 0;
BackgroundWorker worker = new BackgroundWorker();
// Event for the method that will run on the background
worker.DoWork += this.Worker_DoWork;
// Event that will run after the BackgroundWorker finnish
worker.RunWorkerCompleted += this.Worker_RunWorkerCompleted;
worker.RunWorkerAsync();
}
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
Dispatcher.Invoke(new Action(() =>
{
this.progressBarWorkerTest.Value = i;
}));
Thread.Sleep(100);
}
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// You can put the code here to open the new form and such
}
Dispacher.Invoke
是因为它在 WPF 上,对于 WinForm 只需将其更改为 this.Invoke
这个例子,当按钮被点击时它会启动 BackgroundWorker,有一个从 1 到 100 的 for,它会休眠 100 毫秒并更新进度条。
希望对你有帮助
编辑
现在在示例中包含了在 BackgroundWorker 完成时运行的事件,以防万一需要它
编辑 2:
我的建议是在背景上搜索照片时将它们全部插入 DataTable 中,因为您已经准备好搜索它们并且工作也可以在这里完成,然后只需在 FormResultadosFotos 上创建一个构造函数来接收它数据表。
据我所知,主要目标是在 FormPesquisaFotos 表单上搜索它们(这就是为什么我们在那里有后台工作人员,搜索它们并更新 ProgressBar)并在新表单 AKA FormResultadosFotos 上显示它们
// Lets create a DataTable variable to be access on the Worker_DoWork and then on the Worker_RunWorkerCompleted
private DataTable tableOfPhotos;
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
// Search for the photos here and then add them to the DataTable
this.tableOfPhotos = new DataTable();
tableOfPhotos.Columns.Add("Nome e formato do ficheiro (duplo clique para visualizar a imagem)");
tableOfPhotos.Columns.Add("Caminho ( pode ser copiado Ctrl+C )");
foreach (string diretorio in diretorios)
{
// se pretendermos pesquisar em várias pastas
List<string> diretorios = new List<string>()
{@"\\Server\folder01\folder02"};
// se pretendermos pesquisar as várias extensões
List<string> extensoes = new List<string>()
{"*.jpg","*.bmp","*.png","*.tiff","*.gif"};
var ficheiros = Directory.EnumerateFiles(diretorio, "*", SearchOption.AllDirectories).
Where(r => extensoes.Contains(Path.GetExtension(r.ToLower())));
foreach (var ficheiro in ficheiros)
{
DataRow row = tableOfPhotos.NewRow();
row[0] = Path.GetFileName(ficheiro);
row[1] = ficheiro;
tableOfPhotos.Rows.Add(row);
}
}
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// You can put the code here to open the new form and such
FormResultadosFotos NovoForm = new FormResultadosFotos(this.tableOfPhotos);
NovoForm.Show();
}
// Constructor that will receive the DataTable and put it into the dataGridView1, it should be added on the Form FormResultadosFotos
Public FormResultadosFotos(DataTable table)
{
InitializeComponent();
// In here we will tell the where is the source for the dataGridView1
this.dataGridView1.DataSource = table;
}
在这里,您还可以通过在 this.dataGridView1.DataSource = table;
行上放置一个断点来查看表格带来的内容,如果表格为空,则表格中没有任何内容(也许目录上没有照片?无法访问它?不在工作,也没有任何 IDE,只是根据我头脑中的内容来回答我的问题,但您也可以将文件放在一个类似的文件中代码(如果需要):
List<string> tempList = new List<string>;
foreach (string entryExt in extensoes)
{
foreach (string entryDir in diretorios)
{
// SearchOption.AllDirectories search the directory and sub directorys if necessary
// SearchOption.TopDirectoryOnly search only the directory
tempList.AddRange(Directory.GetFiles(entryDir, entryExt, SearchOption.AllDirectories));
}
}
// Here would run all the files that it has found and add them into the DataTable
foreach (string entry in tempList)
{
DataRow row = tableOfPhotos.NewRow();
row[0] = Path.GetFileName(entry);
row[1] = entry;
tableOfPhotos.Rows.Add(row);
}
编辑 3:
改变你的代码
List<string> extensoes = new List<string>(){".jpg",".bmp",".png",".tiff",".gif"};
到
List<string> extensoes = new List<string>(){"*.jpg","*.bmp","*.png","*.tiff","*.gif"};
您需要在扩展名前加上 *(例如 .png)才能搜索该扩展名的文件
关于c# - 搜索按钮上的进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51984123/
所以我有这个 javascript 片段,它有两个按钮可以进入全屏,一个按钮可以退出全屏。我想做到这一点,如果我不在全屏模式下,按钮会显示转到全屏模式,而当我处于全屏模式时,按钮会显示退出全屏模式..
我在自定义控件中添加了一个新属性作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用我的自定义控件后,我在属性网格中看到一个省略号 (…) 按钮,如字体属性的“…”按钮
我在自定义控件中添加了一个新属性作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用我的自定义控件后,我在属性网格中看到一个省略号 (…) 按钮,如字体属性的“…”按钮
我尝试将 Twitter 上的“Tweet Me”按钮 ( http://twitter.com/goodies/tweetbutton ) 添加到我的网站。然而,每当按下按钮时,我都会收到此 Jav
我试图在我的文本区域中获取一个按钮值,如果我使用 则工作正常但如果我使用那么它就不起作用了。你能找出问题所在吗? HTML 1 2 3 4 JavaScript $(document).read
我的 C# Winform 面板中有一堆文本框。每行文本框的命名如下: tb1 tbNickName1 comboBox1 tb2 tbNickName2 comboBox2 tb3 tbNickNa
我有一个表单,其中过滤器下方有按钮(应用过滤器和清除过滤器),我试图在单击“应用”按钮时显示“清除”,并在单击“清除”按钮时隐藏“清除”按钮。 下面的代码(如果我的表有的话):
excel 按钮正在工作,但是当我添加 pdf 按钮时,它添加仅显示 pdf 按钮 excel 按钮在 pdf 按钮添加后隐藏 $(document).ready(function() { $
我想创建一个 div 作为标题并分成 3 列,并按以下顺序在其中放置 2 个按钮和一个标题:Button1(左位) Title(居中) Button2(右位) 这是我为这个 div 编写的代码:
仅当选中所有框时才应禁用“允许”按钮。我该怎么做?我已经完成了 HTML 部分,如下所示。如何执行其中的逻辑部分?即使未选中一个复选框,也应禁用“允许”按钮
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
如您所知,您可以使用 2 种方法在 HTML5 中呈现按钮: 使用 void 元素 或 如果您需要内容,请使用 元素(不是空元素)。 在JSF2中,有2种方式生成按钮;与UICommand或 UIOu
我尝试根据表单元素的更改禁用/启用保存按钮。但是,当通过弹出按钮选择更改隐藏输入字段值时,保存按钮不受影响。 下面是我的代码。我正在尝试序列化旧的表单值并与更改后的表单值进行比较。但我猜隐藏的字段值无
我有用于在消息(电子邮件、短信)上输入内容的 EditText。我希望在单击 ActionDone 按钮时立即发布消息。我为此使用以下代码: message.setOnEditorActionList
我的 Android 应用程序中有一堆 EditText,每个都将 InputMethod 设置为 numberSigned。我的目标设备没有硬件键盘,而是使用软件键盘输入数字。 Android 将输
我无法以编程方式隐藏弧形菜单中的 fab 按钮。我正在使用https://github.com/saurabharora90/MaterialArcMenu在我的代码中。如何在Java中以编程方式隐藏
我已经看到这在其他类型的对话框窗口中是可能的,例如“showConfirmDialog”,其中可以指定按钮的数量及其名称;但是使用“showInputDialog”时是否可以实现相同的功能?我似乎无法
相同的按钮用于激活和停用。第一次,当代码运行按钮单击并成功“停用”时。但第二次,代码无法找到该元素。第一个案例按钮位于第二个“a”标签中,然后停用第一个“a”标签中的按钮。 案例1: Edit
是否可以将按钮的 onclick 操作设置为 JavaScript 变量?这个想法是我们用 JavaScript 控制一个表。每当点击该表的一行时,我们就会更新一个 JavaScript 变量。该 v
我想创建一个按钮,它包含左侧的文本和右侧的复选框(或任何其他组件)。我怎样才能做到这一点? 我发现我可以制作自己的 View extends Button,但是如果可以的话我应该如何实现 onDraw
我是一名优秀的程序员,十分优秀!