2011-10-27 25 views
0

2つのプロパティがあります。最初のものは整数プロパティです。これはIDです。 2番目の文字列は文字列で、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; 
} 

私はそれがOKのように見えると思います。しかし、実行時にFirstPlaceIdプロパティに値(5)を割り当てると、NotSupportedExceptionエラーが発生します。 なぜ、ソリューションですか? Thx

+0

ちょうどBeginInvokeメソッドを使用していない、何のポイントはありませんすぐにEndInvokeを呼び出すと –

答えて

1

問題を再現できません。どの.NET Frameworkを使用していますか?

これは、デリゲートコールが完了するまで(EndInvoke)すぐに待機するため、サンプルコードでBeginInvoke/threadingを使用する利点はありません。

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

だけBeginInvokeを削除:この1つはちょうどおよびブロックすることプロパティが機能的に同じです。

+0

begininvokeは私の2回目の試験です。まず、同じ結果を持つスレッドを開始しようとしました。私は、Windows Mobile SDKを使用して.Net CF 2.0を使用しています。 – Franziee

+0

BeginInvokeはCFやSilverlightではサポートされていません。 http://stackoverflow.com/questions/1062930/threadstart-begininvoke-throws-notsupportedexception-on-compact-frameworkおよびhttp://stackoverflow.com/questions/3516161/method-is-not-supported-error-whenを参照してください。 -treat-to-invoke-a-delegateを呼び出します。 –

+0

私はBegininvokeを暗黙的に使用しています。CF WM6アプリケーションにWebサービスコールがあり、VS2008がWebサービス呼び出しに適切なプロキシクラスを作成し、BeginInvokeを使用して非同期呼び出しを含んでいます。 Webサービスの呼び出しがうまく動作します。 – Franziee

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

EDIT:実際にThreadを開始するように修正されたコード。

この修正を適用すると、問題なく動作します。 (そして、私はので、私は確かに知らないが、私はあなたのdelegateが何らかの理由でBeginInvokeEndInvokeをサポートしていないことを推測するC#の専門家ではない。)

+1

このコードは決して実際にスレッドを実行しません.... – ctacke

+0

申し訳ありません、私はそれを修正しました。 – ytg

関連する問題