C#List.Add System.InvalidOperationException

我正在处理来自其父窗体的子窗体中的事件,并且当我尝试从处理程序的事件args中包含的列表中添加项目时(在下面的代码中为ScraperForm_SiteScraped),我在控制台中收到异常System.InvalidOperationException 。


有趣的是,它似乎在第一次添加时就成功了,但是没有后续尝试。


public partial class ProxyTesterView : UserControl

{


    private BindingList<Proxy> proxies = new BindingList<Proxy>();

    private BindingList<ProxyJudge> pudges = new BindingList<ProxyJudge>();

    private BindingList<ProxyTest> tests = new BindingList<ProxyTest>();

    private PauseOrCancelTokenSource pcts = new PauseOrCancelTokenSource();

    private ProxyScraperForm scraperForm = new ProxyScraperForm();


    public ProxyTesterView()

    {

        InitializeComponent();


        proxies.ListChanged += Proxies_ListChanged;

        scraperForm.SiteScraped += ScraperForm_SiteScraped;

    }


    private void Proxies_ListChanged(object sender, ListChangedEventArgs e)

    {

        ProxiesDataGridView.RowCount = proxies.Count;

    }


    private void AddFromScraperToolStripMenuItem_Click(object sender, EventArgs e)

    {

        scraperForm.Show();

    }


    private void ScraperForm_SiteScraped(object sender, SiteScrapedEventArgs e)

    {

        foreach (var proxy in e.ScrapedProxies)

        {

            proxies.Add(proxy);

        }

    }

}

子表格


public partial class ProxyScraperForm : Form

{


    private BindingList<IProxyScraperSite> sites = new BindingList<IProxyScraperSite>();


    public int ScrapeInterval { get; set; } = 60000;


    public event EventHandler<SiteScrapedEventArgs> SiteScraped;


    public ProxyScraperForm()

    {

        InitializeComponent();


        sites.Add(new ProxyScraperSiteUsProxyOrg());

        sites.Add(new ProxyScraperSiteFreeProxyListNet());

        sites.Add(new ProxyScraperSiteFreeProxyListsNet());

        sites.Add(new ProxyScraperSiteHideMyName());

        sites.Add(new ProxyScraperSiteHidester());

        ScraperDataGridView.DataSource = sites;

    }


    

噜噜哒
浏览 181回答 1
1回答

宝慕林4294392

从我们的评论中可以看出,这是一个线程问题。作为一种好习惯,当代码块中可能出现异常时,请始终使用try / catch块。:)另外,如果您使用的是Visual Studio,则可以通过按CTRL + ALT + E并选中复选框来使VS中断更多的异常。您可以在此处阅读更多有关异常中断的信息。
打开App,查看更多内容
随时随地看视频慕课网APP