第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

foreach 內(nèi)的“跨線程操作無效”

foreach 內(nèi)的“跨線程操作無效”

C#
哆啦的時(shí)光機(jī) 2023-09-09 16:50:26
我正在嘗試將數(shù)據(jù)加載到組合框,并且當(dāng)我運(yùn)行表單而不進(jìn)行調(diào)試時(shí)它正在工作。但是,當(dāng)我嘗試使用調(diào)試模式運(yùn)行它時(shí),出現(xiàn)錯(cuò)誤:System.InvalidOperationException:“跨線程操作無效:從創(chuàng)建它的線程以外的線程訪問控制“ResultBox”?!?我怎樣才能解決這個(gè)問題?順便說一句,有一個(gè)后臺(tái)工作人員在下載數(shù)據(jù)時(shí)寫入消息。我在某處讀到可以使用后臺(tái)工作人員解決此問題。這是表單代碼:public Form1()    {        InitializeComponent();        backgroundWorker1.WorkerReportsProgress = true;    }    private void Form1_Load(object sender, EventArgs e)    {        backgroundWorker1.RunWorkerAsync();    }    private Task GetDataTask() {        return Task.Factory.StartNew(() => {            List<Result> results = new List<Result>();            results =  GetResults.GetData("http://worldcup.sfg.io/teams/results/");            foreach (var result in results)            {                ResultBox.Items.Add(result.Fifa_Code);            }        });    }    private void ResultBox_SelectedIndexChanged(object sender, EventArgs e)    {    }    private void SaveTeam_Click(object sender, EventArgs e)    {    }    private async void backgroundWorker1_DoWork(object sender,  DoWorkEventArgs e)    {        await GetDataTask();    }    private void backgroundWorker1_ProgressChanged(object sender,  ProgressChangedEventArgs e)    {        resultsLoadedLabel.Text = (e.ProgressPercentage.ToString() + "%");    }    private void backgroundWorker1_RunWorkerCompleted(object sender,  RunWorkerCompletedEventArgs e)    {        resultsLoadedLabel.Text = "Podaci u?itani!";    }foreach 中的這行代碼出現(xiàn)異常:ResultBox.Items.Add(result.Fifa_Code);這是獲得結(jié)果的類:public class GetResults{    public static List<Result> GetData(string url) {        var client = new RestClient();        var request = new RestRequest(url, Method.GET);        request.AddHeader("User-Agent", "Nothing");        IRestResponse<List<Result>> results = client.Execute<List<Result>>    (request);        return results.Data;    }}
查看完整描述

1 回答

?
繁華開滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果采用異步,則始終采用異步。RestSharp 允許您進(jìn)行異步調(diào)用


所以你可以重構(gòu)數(shù)據(jù)訪問


public class GetResults {


    public static async Task<List<Result>> GetDataAsync(string url) {

        var client = new RestClient();

        var request = new RestRequest(url, Method.GET);

        request.AddHeader("User-Agent", "Nothing");

        IRestResponse<List<Result>> results = await client.ExecuteTaskAsync<List<Result>>(request);

        return results.Data;

    }

}

接下來,由于表單加載是一個(gè)事件處理程序,因此您也可以使其異步并加載數(shù)據(jù)。


public Form1() {

    InitializeComponent();

}


private async void Form1_Load(object sender, EventArgs e) {

    //On UI thread

    resultsLoadedLabel.Text = "Loading data!";

    //get data on separate thread (non blocking)

    List<Result> results = await GetResults.GetDataAsync("http://worldcup.sfg.io/teams/results/");

    //Back on UI thread

    resultsLoadedLabel.Text = "Podaci u?itani!";

    foreach (var result in results) {

        ResultBox.Items.Add(result.Fifa_Code);

    }

}

確保在使用異步調(diào)用時(shí)訪問 UI 控件時(shí),可以在創(chuàng)建它們的主線程上訪問它們(請(qǐng)參閱注釋)。


查看完整回答
反對(duì) 回復(fù) 2023-09-09
  • 1 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)