在web service 上有个方法
public DataSet GetDataSet()
{
.
.
.
  return dataset ;
}在客户端有个'终止'按钮
作用是 
在返回DataSet的过程中
终止DataSet的返回请问怎样实现?

解决方案 »

  1.   

    不显示返回操作结果不就行了,如果返回的XML文件正在网络传输了,还怎么中止。
      

  2.   

    同意楼上如果一行一行获取还可以。。
    public DataRow GetNextRow()
    {
    .
    .
    .
    return datarow;
    }
      

  3.   

    不显示返回操作结果不就行了,如果返回的XML文件正在网络传输了,还怎么中止。
    =========================================================================同意
      

  4.   

    不知道如下的方法是否可以:
    WebClientProtocol.Abort 方法
      

  5.   

    我在客户端把返回dataset的方法放到一个线程中,这样就可以终止,行吗?
      

  6.   

    你放在个线程中执行,把线程给Abort了不就行了?
      

  7.   

    如果你想中止服务器的读取数据库操作,那就很麻烦了,毕竟你没法绕开HTTP协议。
      

  8.   

    可以试一试:
    WebClientProtocol.Abort 方法
      

  9.   

    线程 的方法可以,不过出现新问题
    datagridview 绑定dataset 后
    滚动条没了
    已经设置ScrollBars=both 了
      

  10.   

    新开一个线程专门用来获取WebService的DataSet....终止的时候,调用线程的Abort()方法就可以了....试试吧...
      

  11.   

    线程实例要定义为全局的...两个按钮都可以调用....反正有空.随意写一段代码:private System.Threading.ThreadStart s = null;
    private System.Threading.Thread t = null;private DataSet result = null;//用于保存从WebService获取的结果...private void btnGetDataSet_Click(object sender, EventArgs e)
    {
        s = new System.Threading.ThreadStart(this.GetDataSet);
        t = new System.Threading.Thread(s);
        t.Start();
    }private void btnStop_Click(object sender, EventArgs e)
    {
        if (t != null)
        {
             t.Abort();
             
             if (result != null) result = null;
        }
    }private void GetDataSet()
    {
        //此处调用WebService的GetDataSet方法.并处理返回的结果....
    }
      

  12.   

    线程 的方法可以,不过出现新问题
    datagridview 绑定dataset 后
    滚动条没了
    已经设置ScrollBars=both 了
      

  13.   

    btnGetDataSet_Click开始获取返回值.btnStop_Click终于线程...而GetDataSet是委托给线程做操作的.所有工作都在这里面完成...由于程线可以异步调用的.在WebService的GetDataSet方法还未完全返回结果集之前...可以通过btnStop点击来终止线程的执行.实现您想要的效果...希望对您有帮助...
      

  14.   

    获取完之后...先把datagridview绑定null;再以这程方式[result.Tables[0].Copy]绑定到datagridview试试...
      

  15.   

    //加多一句.哈哈...if (this.datagridview.ScrollBars != ScrollBars.Both)
    {
        this.datagridview.ScrollBars = ScrollBars.Both;
    }
      

  16.   

    [result.Tables[0].Copy] if (this.datagridview.ScrollBars != ScrollBars.Both)
    {
        this.datagridview.ScrollBars = ScrollBars.Both;
    }
    =====================================================
    这两种方法都不行,其实是滚动条死在那了,不动了
      

  17.   

    这两种方法都不行,其实是滚动条死在那了,不动了
    ---------------------------
    这个原因应该是相当于在其它线程创建的控件在本线程无法操作造成的,你可以参考Invoke方法.及InvokeRequired属性来决定是否是在其它的线程来调用控件的方法.
      

  18.   

    参考:
    Control.InvokeRequired 属性 
    获取一个值,该值指示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。 属性值
    如果控件的 Handle 是在与调用线程不同的线程上创建的(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。 Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。该属性可用于确定是否必须调用 Invoke 方法,当不知道什么线程拥有控件时这很有用。 
      

  19.   

    试试连datagridview也用线程来创建...注意创建datagridview跟获取DataSet是同一个线程...可能这里存在跨线程的限制...
      

  20.   

    绑定的DataSet不能是在线程中动态产生的DataSet,你可以通过委托将线程获取的数据copy到主线程的指定DaTaSet中,DataGridView绑定主线程的DaTaSet