窗体里有个下拉框控件ComboBox,我在按钮按下时要做一些操作,其中有对该下拉框是否有选中值进行判断,采用线程操作,代码如下
//按钮事件中代码
ThreadStart start = new ThreadStart(GetXzInfoDetails);
this.ConnectThread = new Thread(start);
this.ConnectThread.IsBackground = true;
this.ConnectThread.Start();
//GetXzInfoDetails中是一些操作
//现在的问题是,我想这么用
        private delegate bool CheckComBoxDelgate();
        private bool CheckComBox()
        {
            bool flag = true;
            if (this.cmbXzList.InvokeRequired)
            {
                CheckComBoxDelgate Objdelegate = new CheckComBoxDelgate(CheckComBox);
                this.Invoke(Objdelegate, null);
            }
            else
            {
                if (cmbXzList.SelectedItem == null)
                {
                    flag = false;
                }
            }
            return flag;
        }
//然后在GetXzInfoDetails方法中来进行判断
if(CheckComBox())
{
     MessageBox.Show("请选择一个选项!");
     return;
}
但是那个CheckComBox是永远返回true的,大家帮忙解决下 谢谢,能像我那么用吗?以前只用过通过委托使线程得到主线程代理然后操作一些文本框什么的并赋值,没这么弄过呀。而且这个程序里我还想通过这种方法返回下拉框选中项的值,不知道可以不?大家有什么好办法

解决方案 »

  1.   

    这个不需要用多线程来做,你就直接在对combobox的DropDown事件中增加check就可以了。
      

  2.   

    如果要是放到线程里来做呢?
    比如说有字典存着下拉框的值当作key,对应上一个VALUE,我想在线程中通过当前所选的下拉框的值来找字典中的VALUE,
    该如何做呢?
      

  3.   

    看上去挺复杂,不过要满足你的要求好像不用这么麻烦吧,直接获取combobox的text,然后执行操作不可以吗/
      

  4.   

    是的,当前这个不需要那么麻烦,但是这个FORM上的一些控件,会被一些创建线程控制和访问,所以还是需要的。
    如果只是赋值的话还好说些
      

  5.   


     private bool CheckComBox()
            {
                bool flag = true;
                if (this.cmbXzList.InvokeRequired)
                {
                    CheckComBoxDelgate Objdelegate = new CheckComBoxDelgate(CheckComBox);
                    this.Invoke(Objdelegate, null);//你在线程里操作。肯定这里执行了。可你Invoke后flag 又没判断赋值。当然是true啊
                }
                else
                {
                    if (cmbXzList.SelectedItem == null)
                    {
                        flag = false;
                    }
                }
                return flag;
            }
    //------------------------------------------------
    delegate object  CheckComBoxDelgate();object oSelectedItem =  pdcbxMediaGroups.Invoke(new CheckComBoxDelgate(delegate() {return pdcbxMediaGroups.SelectedItem;  }));//就两行代码,你判断oSelectedItem 更直接
    /*如果要是放到线程里来做呢? 
    比如说有字典存着下拉框的值当作key,对应上一个VALUE,我想在线程中通过当前所选的下拉框的值来找字典中的VALUE, 
    该如何做呢?*/
    //这个用IDictionary<string,object> 啊[email protected]
      

  6.   

    object oSelectedItem =  pdcbxMediaGroups.Invoke(new CheckComBoxDelgate(delegate() {return pdcbxMediaGroups.SelectedItem;  }));
    就是这个了
    谢谢