0

私のプロジェクトには2つ のListViewコントロールがあり、そのうちの1つは完全に正常に機能するため、最近まで、その動作が非常に奇妙である理由がわかりませんでした。

チェックされたプロパティを認識しない場合もあれば、チェックされたプロパティを取得したときに「」が返される場合もあります。正常に動作し、TrueまたはFalseを返す場合もあります。

リストボックスにアクセスするためのコードは以下のとおりです。チェックステータスを取得するための同じコードを持つ2つが完全に正常に機能することを覚えておいてください。

また、他の列が機能しているときに中央の列のサブテキストが常に「」を返すときに問題が発生し始めたため、データテーブルから目的の出力を取得するためにコードを変更する必要があります。

アップデート

また、デバッグモードで、行ごとに移動する場合も、毎回正常に動作し、実行すると値が得られます。行をスキップするか、チェックされた行を認識しない可能性があります。

for (int i = 0; i < listView1.Items.Count - 1; i++)
            {
                //  string tmpVal = string.Empty;
                bool tmpVal = false;
                if (listView1.InvokeRequired)
                {
                    listView1.BeginInvoke(new MethodInvoker(
                        () =>

                        tmpVal = listView1.Items[i].Checked

                            ));
                }
                else
                {
                    tmpVal = listView1.Items[i].Checked;
                }

                if (tmpVal == true)
                {
                    string senderEMail = string.Empty;

                    if (listView1.InvokeRequired)
                    {
                        listView1.BeginInvoke(new MethodInvoker(
                            () =>

                            senderEMail = listView1.Items[i].SubItems[1].Text.ToString()

                                ));
                    }
                    else
                    {
                        senderEMail = listView1.Items[i].SubItems[1].Text.ToString();
                    }

                    int rowNumber = 0;

                    string rNumber = string.Empty;


                    if (listView1.InvokeRequired)
                    {
                        listView1.BeginInvoke(new MethodInvoker(
                            () =>

                            rNumber = listView1.Items[i].SubItems[3].Text.ToString()

                                ));
                    }
                    else
                    {
                        rNumber = listView1.Items[i].SubItems[3].Text.ToString();

                    }

                    rowNumber = Convert.ToInt16(rNumber.Trim());

                    if (checkBox2.Checked)
                    {
                        //GET UNSUBSCRUBE URL IF ANY HIT IT AND ALSO SEND EMAIL

                        string unSubscribeUrl = resultSheet.Rows[rowNumber - 1]["UnsubscribeLink"].ToString();
                        string receiver = resultSheet.Rows[rowNumber - 1]["receiver"].ToString();
                        if (unSubscribeUrl != "")
                        {
                            unSubscribeUrl = unSubscribeUrl.Replace("amp;", "").Trim();

                            string html = getHtml(unSubscribeUrl);
                        }

                        //SENDING EMAIL
                        receiver = receiver.ToLower();

                        OutLook.Application oApp1 = new OutLook.Application();
                        OutLook.MailItem mail = oApp1.CreateItem(OutLook.OlItemType.olMailItem) as OutLook.MailItem;

                        mail.Subject = "unsubscribe | uitschrijven | gelieve geen mails te sturen";
                        mail.To = senderEMail;

                        SetAccount_2007_2010(mail, receiver);

                        Marshal.ReleaseComObject(oApp1);
                    }

                    if (checkBox3.Checked)
                    {
                        deleteSenderList.Add(senderEMail);
                    }



                }
            }
4

1 に答える 1

0

BeginInvokeへの呼び出しをInvoke-への呼び出しに置き換えBeginInvokeます。非同期で処理されるため、タイミングの問題が発生する可能性があります。

于 2013-02-14T13:38:18.593 に答える