none
DataGridView+BindingSource 一起时,循环会出错 RRS feed

  • 问题

  • dataGridView1.DataSource = protocol1.bindingSource1;
    backgroundWorker1.RunWorkerAsync();


    private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
           //while (true)//加入这行将会出错....
           {
                bindingSource1.Position = 0;
                DataRowView drv1 = (DataRowView)bindingSource1.Current;
                drv1[0]="hello";         
                Thread.Sleep(1);
           }
    }

    请问大家有遇过这样的问题吗...
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月13日 19:30 Windows表单类库问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月5日 14:26

答案

  • 你这是一个永远不会出去的死循环阿。。。
    编译器应该不会允许你的

    最好你在里面做一个假的退出判断
    比如说你设置一个Public bool  quiting

    if (this.quitting==true) break;

    编译器不知道你这个条件永远无法达成  就放你一马
    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 1:41
    版主
  • 谢谢您的回复,,但是不是这样子的...
    跟放一马没关系,,反正就是不能循环,,,
    如果放个延时可能会久一点才出错,,没延时很快就出错了...
    这个意思

    • 已标记为答案 tssing 2009年3月6日 2:12
    2009年3月6日 2:12
  • 那就很奇怪了   出现的错误是堆栈溢出还是什么呢?
    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 5:07
    版主
  • 另外一个可能的问题

    如果你对  DataRowView drv1 的修改  导致    bindingSource1的filter 结果有所变化  很可能导致
    运行bindingSource1.Position = 0;这句的时候
    和 (DataRowView)bindingSource1.Current 的时候  行集合发生变化。

    这个一点需要你纪录下来的错误提示来验证


    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 5:17
    版主
  •  private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
           //while (true)//加入这行将会出错....
           {
                DataRowView drv1 = (DataRowView)bindingSource1[0];
                drv1[0]="hello";         
                Thread.Sleep(1);
           }
    }

    也出错了....跟position没关系...
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 5:19
  •  只有加上DataGridView才会出错...
    • 已标记为答案 tssing 2009年3月7日 8:48
    2009年3月7日 8:48

全部回复

  • 你这是一个永远不会出去的死循环阿。。。
    编译器应该不会允许你的

    最好你在里面做一个假的退出判断
    比如说你设置一个Public bool  quiting

    if (this.quitting==true) break;

    编译器不知道你这个条件永远无法达成  就放你一马
    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 1:41
    版主
  • 谢谢您的回复,,但是不是这样子的...
    跟放一马没关系,,反正就是不能循环,,,
    如果放个延时可能会久一点才出错,,没延时很快就出错了...
    这个意思

    • 已标记为答案 tssing 2009年3月6日 2:12
    2009年3月6日 2:12
  • 那就很奇怪了   出现的错误是堆栈溢出还是什么呢?
    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 5:07
    版主
  • 另外一个可能的问题

    如果你对  DataRowView drv1 的修改  导致    bindingSource1的filter 结果有所变化  很可能导致
    运行bindingSource1.Position = 0;这句的时候
    和 (DataRowView)bindingSource1.Current 的时候  行集合发生变化。

    这个一点需要你纪录下来的错误提示来验证


    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 5:17
    版主
  •  private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
    {
           //while (true)//加入这行将会出错....
           {
                DataRowView drv1 = (DataRowView)bindingSource1[0];
                drv1[0]="hello";         
                Thread.Sleep(1);
           }
    }

    也出错了....跟position没关系...
    • 已标记为答案 tssing 2009年3月6日 5:19
    2009年3月6日 5:19
  •  只有加上DataGridView才会出错...
    • 已标记为答案 tssing 2009年3月7日 8:48
    2009年3月7日 8:48