2011-10-27 88 views
0

我有兩個屬性。第一個是整數屬性,這是一個ID。第二個是String,它對應於ID。 當我設置ID時,我將在一個單獨的線程中設置通訊錄字符串屬性。 代碼snipet是:線程在屬性設置器

public int FirstPlaceId 
{ 
    set 
    { 
     firstPlaceId = value; 
     setPlaceNameDelegate d = new setPlaceNameDelegate(setPlaceName); 
     IAsyncResult iar = d.BeginInvoke(value, null, null); 
     FirstPlace = d.EndInvoke(iar); 
    } 
    get { return firstPlaceId; } 
} 

public string FirstPlace { set; get; } 

private string setPlaceName(int id) 
{ 
    return "alma"; 
} 

delegate String setPlaceNameDelegate(int id); 

methodus() 
{ 
    FirstPlaceId = 5; 
} 

我認爲它看起來像確定。但是在運行時,當我將一些值(5)分配給FirstPlaceId屬性時,會發生NotSupportedException錯誤。 爲什麼和解決方案是什麼? Thx

+0

只要不使用的BeginInvoke,有沒有點當你立即調用EndInvoke時。 –

回答

1

我無法重現您的問題。你在使用哪個.NET Framework?因此,我們沒有看到在示例代碼中使用BeginInvoke/threading的好處,因爲它會立即等待委託調用完成(使用EndInvoke)。該財產將只是封鎖,並在功能上是相同的這一個:

public int FirstPlaceId 
{ 
    set 
    { 
     firstPlaceId = value; 
     FirstPlace = setPlaceName(value); 
    } 
    get { return firstPlaceId; } 
} 

只是刪除BeginInvoke

+0

begininvoke是我的第二次審判。首先,我試着用相同的結果開始一個線程。我使用的是Windows Mobile sdk 6的.Net CF 2.0。 – Franziee

+0

在CF或Silverlight中不支持BeginInvoke。請參閱http://stackoverflow.com/questions/1062930/threadstart-begininvoke-throws-notsupportedexception-on-compact-framework和http://stackoverflow.com/questions/3516161/method-is-not-supported-error-when -trying到調用-A-委託。 –

+0

我隱式地使用了Begininvoke:在我的CF WM6應用程序中有一個Web服務調用,並且VS2008創建了適合webservice調用的代理類,並且它包含使用BeginInvoke的異步調用。 Web服務調用工作正常。 – Franziee

0
public void SetFirstPlaceId(int value) 
{ 
    firstPlaceId = value; 
    Thread t = new Thread(delegate() 
    { 
     FirstPlace = setPlaceName(1); 
    }); 
    t.IsBackground = true; 
    t.Start(); 
} 

編輯:代碼固定到實際啓動Thread

通過此修改,它對我來說工作得很好。 (我不是一個C#專家,所以我不知道是肯定的,但我猜你delegate不支持某些原因BeginInvokeEndInvoke

+1

這段代碼從來沒有真正執行線程.... – ctacke

+0

對不起,我修正了它。 – ytg