Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进度条在c中不刷新#_C#_Winforms_Progress Bar - Fatal编程技术网

C# 进度条在c中不刷新#

C# 进度条在c中不刷新#,c#,winforms,progress-bar,C#,Winforms,Progress Bar,我有一个问题,我正在使用on button\u click方法中的backgroundWorker1.RunWorkerAsync(),并使用backgroundWorker1\u DoWork(),backgroundWorker1\u ProgressChanged()事件。此外,所有事件都会触发,但进度条不会刷新。这是我的密码: private void btnMove_Click(object sender, EventArgs e) { try

我有一个问题,我正在使用on button\u click方法中的
backgroundWorker1.RunWorkerAsync()
,并使用
backgroundWorker1\u DoWork()
backgroundWorker1\u ProgressChanged()
事件。此外,所有事件都会触发,但进度条不会刷新。这是我的密码:

private void btnMove_Click(object sender, EventArgs e)
        {

            try
           {

               backgroundWorker1.RunWorkerAsync();

                for (int i = 0; i < gdFiles.Rows.Count - 1; i++)
                {
                    // my process
                 }

              catch (Exception ex)
            {

            }

        }
     }
private void btnMove\u单击(对象发送方,事件参数e)
{
尝试
{
backgroundWorker1.RunWorkerAsync();
对于(int i=0;i
事件是

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {

                backgroundWorker1.ReportProgress(i);
                Thread.Sleep(100);
            }
        }


        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
            progressBar1.Refresh();
        }
private void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{

对于(int i=1;i检查
backgroundWorker1.WorkerReportsProgress的值,应将其设置为true。下面是工作和测试示例:

public partial class Form1 : Form
{
    private BackgroundWorker bw = new BackgroundWorker();

    public Form1()
    {
        InitializeComponent();

        bw.WorkerReportsProgress = true;
        bw.WorkerSupportsCancellation = true;
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
    }

    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {

    }

    void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {

            bw.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        bw.RunWorkerAsync();
    }
}
公共部分类表单1:表单
{
私有BackgroundWorker bw=新BackgroundWorker();
公共表格1()
{
初始化组件();
bw.WorkerReportsProgress=true;
bw.workersupport扫描单元=真;
bw.DoWork+=新DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged+=新的ProgressChangedEventHandler(bw\U ProgressChanged);
bw.RunWorkerCompleted+=新的RunWorkerCompletedEventHandler(bw\u RunWorkerCompleted);
}
void bw_RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
}
void bw_ProgressChanged(对象发送方,ProgressChangedEventArgs e)
{
progressBar1.值=e.ProgressPercentage;
}
void bw_DoWork(对象发送方,DoWorkEventArgs e)
{

对于(int i=1;i检查
backgroundWorker1.WorkerReportsProgress的值,应将其设置为true。下面是工作和测试示例:

public partial class Form1 : Form
{
    private BackgroundWorker bw = new BackgroundWorker();

    public Form1()
    {
        InitializeComponent();

        bw.WorkerReportsProgress = true;
        bw.WorkerSupportsCancellation = true;
        bw.DoWork += new DoWorkEventHandler(bw_DoWork);
        bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
    }

    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {

    }

    void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    void bw_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {

            bw.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        bw.RunWorkerAsync();
    }
}
公共部分类表单1:表单
{
私有BackgroundWorker bw=新BackgroundWorker();
公共表格1()
{
初始化组件();
bw.WorkerReportsProgress=true;
bw.workersupport扫描单元=真;
bw.DoWork+=新DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged+=新的ProgressChangedEventHandler(bw\U ProgressChanged);
bw.RunWorkerCompleted+=新的RunWorkerCompletedEventHandler(bw\u RunWorkerCompleted);
}
void bw_RunWorkerCompleted(对象发送方,RunWorkerCompletedEventArgs e)
{
}
void bw_ProgressChanged(对象发送方,ProgressChangedEventArgs e)
{
progressBar1.值=e.ProgressPercentage;
}
void bw_DoWork(对象发送方,DoWorkEventArgs e)
{

对于(int i=1;i我已尝试复制您的问题,在我这方面效果良好。请确保backgroundWorker1.ReposrtsProgress设置为True。请参阅下面的代码:

   'private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {

            backgroundWorker1.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
        progressBar1.Refresh();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
    }`
“私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{

对于(int i=1;i我已尝试复制您的问题,在我这方面效果良好。请确保backgroundWorker1.ReposrtsProgress设置为True。请参阅下面的代码:

   'private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {

            backgroundWorker1.ReportProgress(i);
            Thread.Sleep(100);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
        progressBar1.Refresh();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
    }`
“私有void backgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e)
{

对于(int i=1;i您是否应该将文件移动逻辑移动到DoWork部分?BackgroundWorker的想法是从UI线程中删除繁重的内容。

您是否应该将文件移动逻辑移动到DoWork部分?BackgroundWorker的想法是从UI线程中删除繁重的内容。

尝试删除
progressBar1.Refresh()
from
backgroundWorker1\u ProgressChanged
event我已经尝试过不使用progressBar1.Refresh();开始时,即使没有得到…可能
//我的进程将阻塞用户界面10秒?所以你只看到0%和100%?你是否按照下面Garath的建议设置了
backgroundWorker1.WorkerReportsProgress=true
。显然,我的进程有文件移动逻辑,其阻塞winfrom。。现在请尝试删除
progressBar1.Refresh();
来自
backgroundWorker1\u ProgressChanged
事件我已尝试不使用progressBar1。刷新();一开始,即使没有得到…也许我的进程会阻止用户界面10秒?所以你只看到0%和100%?你是否设置了
backgroundWorker1.WorkerReportsProgress=true
,正如下面Garath所建议的那样。显然,我的进程有文件移动逻辑,它会阻止winfrom.。现在有什么解决方案吗?