廣告:
clipboardData:System.NullReferenceException: 未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例
異常詳細(xì)信息: </b>System.NullReferenceException: 未將對(duì)象引用設(shè)置到對(duì)象的實(shí)例
行 220: IDataObject clipboardData = Clipboard.GetDataObject();
行 221: //檢查剪貼板中的對(duì)象是否是圖片,如果是圖片則將其保存為指定格式的圖片文件
<font color=red>行 222:
if (clipboardData.GetDataPresent(DataFormats.Bitmap))
</font>行 223: {
行 224:</pre>
clipboardData對(duì)象為null,一般可能不是單一線程模式造成的。
需要在處理頁(yè)面加上:[STAThread]或者webform頁(yè)面頂部加上aspcompat=“true"即可。
當(dāng)頁(yè)面中有使用creatobject創(chuàng)建com對(duì)象時(shí),就需要設(shè)置aspcompat=“true”,
這樣會(huì)使的COM對(duì)象實(shí)例在STA(單線程套間)里面執(zhí)行,否則系統(tǒng)會(huì)將其安排在MTA里面執(zhí)行。
MTA使用線程池來(lái)管理多個(gè)并發(fā)的請(qǐng)求
AutoEventWireup="true" AspCompat="true" CodeBehind="MakePhoto.aspx.cs"
如果升級(jí)到了asp.net 4.0以上,則web.config需要設(shè)置:
<appSettings> <add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" /> </appSettings>
似乎有三種設(shè)置線程套間的方式:
第一種:是在函數(shù)前面加上一個(gè)屬性:
[STAThread] void Main() { //// ... }
第二種:是不寫[STAThread],而是給Thread對(duì)象設(shè)置ApartmentState屬性:
Program obj = new Program(); Thread t1 = new Thread(obj.f1); t1.SetApartmentState(ApartmentState.STA); t1.Start();
對(duì)于com組件的調(diào)用而言,好像只有第二種情況是真的設(shè)置了STA線程套間屬性,第一種似乎沒(méi)有起作用。
[STAThread] 只對(duì) C# 和 Visual Basic 中的 Main() 方法有效
第三種:加aspcompat=“true",針對(duì)aspx頁(yè)面
廣告: