成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

在.NET中使用OpenFileDialog線程出現(xiàn)報(bào)錯(cuò)如何解決-創(chuàng)新互聯(lián)

這篇文章給大家介紹在.NET中使用OpenFileDialog線程出現(xiàn)報(bào)錯(cuò)如何解決,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都近1000家客戶提供網(wǎng)頁設(shè)計(jì)制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),同時(shí)也為不同行業(yè)的客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)公司

代碼如下:

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Microsoft Office Excel(*.xls;*.xlsx)|*.xls;*.xlsx";
ofd.FilterIndex = 1;
ofd.RestoreDirectory = true;


if (ofd.ShowDialog() == DialogResult.OK)
{
   //檢測打開文件路徑是否為空地址
   if (!string.IsNullOrEmpty(ofd.FileName))
   {
          ReadFromExcelFile(ofd.FileName);
   }
   else
   {
          this.textBox1.Text = "請打開excel文件";
    }
}

或者直接

using(OpenFileDialog ofd = new OpenFileDialog()){ ofd.ShowDialog(); }

這兩種,無論哪種寫法,在代碼執(zhí)行的時(shí)候,會報(bào)錯(cuò),具體報(bào)錯(cuò)為:

“System.Threading.ThreadStateException”類型的未經(jīng)處理的異常在 System.Windows.Forms.dll 中發(fā)生

其他信息: 在可以調(diào)用 OLE 之前,必須將當(dāng)前線程設(shè)置為單線程單元(STA)模式。請確保您的 Main 函數(shù)帶有 STAThreadAttribute 標(biāo)記。 只有將調(diào)試器附加到該進(jìn)程才會引發(fā)此異常。

這種情況,在網(wǎng)上查詢,是說線程問題,就是線程沖突了,不知道該執(zhí)行哪一個(gè),具體說法如下:

COM提供的線程模型共有三種:Single-Threaded Apartment(STA 單線程套間)、Multithreaded Apartment(MTA 多線程套間)和Neutral Apartment/Thread Neutral Apartment/Neutral Threaded Apartment(NA/TNA/NTA 中立線程套間,由COM+提供)。

STA 一個(gè)對象只能由一個(gè)線程訪問,相當(dāng)于windows的消息循環(huán),實(shí)現(xiàn)方式也是通過消息循環(huán)的,ActiveX控件、OLE文檔服務(wù)器等有界面的,都使用STA的套間。 MTA 一個(gè)對象可以被多個(gè)線程訪問,即這個(gè)對象的代碼在自己的方法中實(shí)現(xiàn)了線程保護(hù),保證可以正確改變自己的狀態(tài)。

所以創(chuàng)建和訪問一個(gè)activex或者ole對象時(shí),必須設(shè)置線程模式為sta。

那么,在子線程中應(yīng)該如何使用OpenFileDialog才不會繼續(xù)報(bào)這種錯(cuò)誤呢,下面就是更改后的代碼:

/// <summary>
    /// 單線程打開excel文檔
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnXlx_Click(object sender, EventArgs e)
    {
      this.textBox1.Text = string.Empty;

      System.Threading.Thread s = new System.Threading.Thread(new System.Threading.ThreadStart(getExcel));
      s.ApartmentState = System.Threading.ApartmentState.STA;
      s.Start();

    }

    /// <summary>
    /// 讀取excel文檔地址
    /// </summary>
    private void getExcel()
    {
      OpenFileDialog ofd = new OpenFileDialog();
      ofd.Filter = "Microsoft Office Excel(*.xls;*.xlsx)|*.xls;*.xlsx";
      ofd.FilterIndex = 1;
      ofd.RestoreDirectory = true;


      if (ofd.ShowDialog() == DialogResult.OK)
      {
        //檢測打開文件路徑是否為空地址
        if (!string.IsNullOrEmpty(ofd.FileName))
        {
          ReadFromExcelFile(ofd.FileName);
        }
        else
        {
          this.textBox1.Text = "請打開excel文件";
        }
      }
    }

關(guān)于在.NET中使用OpenFileDialog線程出現(xiàn)報(bào)錯(cuò)如何解決就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

名稱欄目:在.NET中使用OpenFileDialog線程出現(xiàn)報(bào)錯(cuò)如何解決-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article44/dpojee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、定制開發(fā)域名注冊、小程序開發(fā)、動態(tài)網(wǎng)站定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
县级市| 武汉市| 龙山县| 梅州市| 靖州| 慈利县| 留坝县| 嘉禾县| 钟祥市| 徐闻县| 东阿县| 武陟县| 大埔县| 石狮市| 东海县| 左贡县| 天门市| 隆德县| 石屏县| 乾安县| 屏东市| 潮州市| 耿马| 永胜县| 浠水县| 泸水县| 广丰县| 青川县| 沁水县| 丰顺县| 昭平县| 清水县| 高碑店市| 布拖县| 曲周县| 南皮县| 泰安市| 公主岭市| 濮阳市| 嵊泗县| 东城区|