日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。

發(fā)布時間:2023/12/18 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題來源:

昨晚上在調試數(shù)據(jù)庫大作業(yè)的時候,我在注冊界面Register里點擊"上傳頭像"這個linklabel時,程序出現(xiàn)了一個異常:在調用OLE之前,必須將當前線程設置為單線程單單元(STA)模式。請確保您的 Main 函數(shù)帶有 STAThreadAttribute 標記。只有將調試程序附加到該進程才會引發(fā)此異常。( 如圖所示 )。

我能怎么辦?我也很絕望。。。。第一次遇到這種線程異常?完全不知道怎么解決?

異常處理:?

復制詳細信息進行百度之后,我知道了怎么處理此異常。。。。哭了?

鏈接1:在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式

鏈接2:在可以調用OLE之前,必須將當前線程設置為單線程單元(STA)模式,請確保您的Main函數(shù)帶有STAThreadAttribute

需要先引用命名空間 using System.Threading; 然后我把代碼改成了下面這樣就沒有報錯啦。

  • private void PictureBox_Click(object sender, EventArgs e)

  • {

  • //錯誤內容: 在可以調用OLE之前,必須將當前線程設置為單線程單元(STA)模式,請確保您的Main函數(shù)帶有STAThreadAttribute。

  • Thread thread = new Thread(new ThreadStart(PictureDialog));

  • thread.SetApartmentState(ApartmentState.STA); //重點

  • thread.Start();

  • }

  • ?
  • public void PictureDialog() //打開一個選擇圖片的對話框

  • {

  • OpenFileDialog openfile = new OpenFileDialog();

  • openfile.Title = "選擇頭像"; //左上角標題

  • openfile.Filter = "圖片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|所有文件(*.*)|*.*"; //可供選擇的文件類型

  • if (openfile.ShowDialog() == DialogResult.OK)

  • {

  • pictureBox.Image = Image.FromFile(openfile.FileName);

  • pictureBox.SizeMode = PictureBoxSizeMode.Zoom; //顯示圖片時按照原比例放大縮小

  • photo = openfile.FileName;

  • }

  • }

  • 然而!這樣改了之后出現(xiàn)了一個新的bug:只要我一直點"上傳頭像"這個linkliable,它就會一直彈出對話框讓我選擇圖片,我點了三下"上傳頭像",效果如圖所示。這不是我想要的結果,按理來說,我們只能允許它出現(xiàn)一個"選擇頭像"的對話框。

    修改的方法很簡單,我在這個窗體的代碼中加了一個bool型變量isVirgin(不要問為什么取這個名字,問就是用來判斷是不是第一次點擊"上傳頭像"),然后添加了倆條 if 語句。

  • private void PictureBox_Click(object sender, EventArgs e)

  • {

  • if(isVirgin)

  • {

  • Thread thread = new Thread(new ThreadStart(PictureDialog));

  • thread.SetApartmentState(ApartmentState.STA); //重點

  • thread.Start();

  • isVirgin = false;

  • }

  • }

  • ?
  • public void PictureDialog() //打開一個選擇圖片的對話框

  • {

  • OpenFileDialog openfile = new OpenFileDialog();

  • openfile.Title = "選擇頭像"; //左上角標題

  • openfile.Filter = "圖片(*.jpg;*.bmp;*png)|*.jpeg;*.jpg;*.bmp;*.png|所有文件(*.*)|*.*"; //可供選擇的文件類型

  • if (openfile.ShowDialog() == DialogResult.OK)

  • {

  • pictureBox.Image = Image.FromFile(openfile.FileName);

  • pictureBox.SizeMode = PictureBoxSizeMode.Zoom; //顯示圖片時按照原比例放大縮小

  • photo = openfile.FileName;

  • }

  • isVirgin = true;

  • }

  • ?

    總結

    以上是生活随笔為你收集整理的C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。