发生错误时如何在后台工作人员上再次调用函数

用户7951164

我在后台工作器上执行了一段很长的代码,但有时我们会遇到网络问题并显示 web 异常,为了处理它,我想在异常块中再次调用该函数,我尝试在取消后再次在同一个后台工作器上调用函数,但是好像我做的不对,

请检查我的代码,它真的很长,所以我只在此处发布必要的详细信息,如果不够,请提前抱歉(在这种情况下请告诉我)

  public static DataSet ds_input;
    private void btn_process_Click(object sender, EventArgs e)
    {
        //some code here to fetch data and call backgroundworker
        backgroundWorker1.RunWorkerAsync(ds);
    }

    private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {               
        //ds_input is a dataset with data in it
                e.Result = check_number(ds_input);
    }

    private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
    {
            int i = e.ProgressPercentage;
            int j = showProgress(i, Total_Record);
            lbl_counter.Text = "Processing " + Convert.ToString(i + 1) + " / " + Convert.ToString(Total_Record) + "  ";
    }

    private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
    {

            DataTable dt = e.Result as DataTable;
            Grid_records.DataSource = e.Result;
    }

    public void check_number(DataSet ds)
    {
        try
        {
            // logic here to perform execution
            //sometime it break due to internet connectivity 
            // i want to resume it in catch block 
        }
        catch (System.Net.WebException ex)
        {

            //how to run backgroundWorker1 here again 
            // i did this 
            backgroundWorker1.CancelAsync();
            backgroundWorker1.Dispose();
            backgroundWorker1.RunWorkerAsync(ds_input);
            // but it says -This BackgroundWorker is currently busy and cannot run multiple tasks concurrently.
            //how to resume the function on same  backgroundWorker1
        }
        finally
        {
        }
    }
}
罗马诺·赞贝

我会以一种不需要重新运行后台工作程序但如果结果不符合预期的方式重新运行操作的方式调整执行逻辑。也许是这样的:

public static DataSet ds_input;
    private void btn_process_Click(object sender, EventArgs e)
    {
        //some code here to fetch data and call backgroundworker
        backgroundWorker1.RunWorkerAsync(ds);
    }

    private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {               
        bool success = false;

        do
        {
            try
            {
                e.Result = check_number(ds_input);
                success = true;
            }
            catch (System.Net.WebException ex)
            {
               success = false;
            }

        }while(!success);
    }

    private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
    {
            int i = e.ProgressPercentage;
            int j = showProgress(i, Total_Record);
            lbl_counter.Text = "Processing " + Convert.ToString(i + 1) + " / " + Convert.ToString(Total_Record) + "  ";
    }

    private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
    {

            DataTable dt = e.Result as DataTable;
            Grid_records.DataSource = e.Result;
    }

    public DataTable check_number(DataSet ds)
    {
        // Do whatever is needed
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在后台工作人员中使用进度栏

来自分类Dev

在后台工作人员中更改标签文本错误

来自分类Dev

如何正确取消永远工作的后台工作人员?

来自分类Dev

如何从多个后台工作人员同步访问/调用对象

来自分类Dev

如何实现与UI无关的后台工作人员任务

来自分类Dev

如何实现与UI无关的后台工作人员任务

来自分类Dev

后台工作人员冻结WPF

来自分类Dev

后台工作人员中的ShowDialog

来自分类Dev

停止后台工作人员

来自分类Dev

如何在Rails sidekiq工作人员调用的视图中使用帮助程序?

来自分类Dev

从后台工作人员向列表框中添加字符串(调用)

来自分类Dev

与后台工作人员之间传递价值

来自分类Dev

简化后台工作人员的匿名方法

来自分类Dev

使用while循环取消后台工作人员

来自分类Dev

是否可以按顺序启动后台工作人员?

来自分类Dev

在DoWork C#中停止后台工作人员

来自分类Dev

后台工作人员处理 vs thread.abort

来自分类Dev

后台工作人员仍然冻结用户界面

来自分类Dev

如何使后台工作人员仅报告进度项目一次?

来自分类Dev

如何实时向后台工作人员报告进度变化事件的目录数?

来自分类Dev

排除工作人员

来自分类Dev

如何在不使用所有工作人员的情况下限制大量任务

来自分类Dev

如何在独立集群模式下为每个工作人员分配更多执行程序?

来自分类Dev

如何在Elixir应用程序中找到工作人员?

来自分类Dev

如何在客户端GUI中报告工作人员“事件”

来自分类Dev

如何在我的ExUnit测试中保留(或阻止运行)对工作人员的呼叫?

来自分类Dev

如何在Cloudflare的工作人员中获取当前日期

来自分类Dev

如何在Asyncio中检查工作人员状态?

来自分类Dev

如何在工作人员关闭时向正在运行的任务发送消息?

Related 相关文章

  1. 1

    在后台工作人员中使用进度栏

  2. 2

    在后台工作人员中更改标签文本错误

  3. 3

    如何正确取消永远工作的后台工作人员?

  4. 4

    如何从多个后台工作人员同步访问/调用对象

  5. 5

    如何实现与UI无关的后台工作人员任务

  6. 6

    如何实现与UI无关的后台工作人员任务

  7. 7

    后台工作人员冻结WPF

  8. 8

    后台工作人员中的ShowDialog

  9. 9

    停止后台工作人员

  10. 10

    如何在Rails sidekiq工作人员调用的视图中使用帮助程序?

  11. 11

    从后台工作人员向列表框中添加字符串(调用)

  12. 12

    与后台工作人员之间传递价值

  13. 13

    简化后台工作人员的匿名方法

  14. 14

    使用while循环取消后台工作人员

  15. 15

    是否可以按顺序启动后台工作人员?

  16. 16

    在DoWork C#中停止后台工作人员

  17. 17

    后台工作人员处理 vs thread.abort

  18. 18

    后台工作人员仍然冻结用户界面

  19. 19

    如何使后台工作人员仅报告进度项目一次?

  20. 20

    如何实时向后台工作人员报告进度变化事件的目录数?

  21. 21

    排除工作人员

  22. 22

    如何在不使用所有工作人员的情况下限制大量任务

  23. 23

    如何在独立集群模式下为每个工作人员分配更多执行程序?

  24. 24

    如何在Elixir应用程序中找到工作人员?

  25. 25

    如何在客户端GUI中报告工作人员“事件”

  26. 26

    如何在我的ExUnit测试中保留(或阻止运行)对工作人员的呼叫?

  27. 27

    如何在Cloudflare的工作人员中获取当前日期

  28. 28

    如何在Asyncio中检查工作人员状态?

  29. 29

    如何在工作人员关闭时向正在运行的任务发送消息?

热门标签

归档