我有两个属性。第一个是整数属性,这是一个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 :(得分:1)
我无法重现您的问题。您使用的是哪种.NET Framework?
话虽如此,我没有看到在示例代码中使用BeginInvoke
/ threading的好处,因为它会立即等待委托调用完成(使用EndInvoke
)。该属性将阻止并在功能上与此相同:
public int FirstPlaceId
{
set
{
firstPlaceId = value;
FirstPlace = setPlaceName(value);
}
get { return firstPlaceId; }
}
只需删除BeginInvoke
。
答案 1 :(得分:0)
public void SetFirstPlaceId(int value)
{
firstPlaceId = value;
Thread t = new Thread(delegate()
{
FirstPlace = setPlaceName(1);
});
t.IsBackground = true;
t.Start();
}
编辑:修复了实际启动Thread
的代码。
通过这个修改它对我来说很好。
(而且我不是C#专家,所以我不确定,但我猜你的delegate
由于某些原因不支持BeginInvoke
和EndInvoke
。)