2013-07-01 37 views
0

有一個小問題か。還有一類的ObservableCollection二進制序列化和傳輸在網絡上

public class PLayer 
{ 
public String Name{get;set;} 
public TimeSpan Tax { get; set; } 

} 

主要形式

public partial class MainWindow : Window 
{ 
public ObservableCollection<PLayer> PlayersInGame { get; set; } 
public ObservableCollection<PLayer> PlayersInGame2 { get; set; } 
public ObservableCollection<PLayer> PlayersOnBench { get; set; } 

public MainWindow() 
{ 
PlayersInGame = new ObservableCollection<PLayer>(); 
PlayersInGame2 = new ObservableCollection<PLayer>(); 

PlayersOnBench = new ObservableCollection<PLayer>(); 

InitializeComponent(); 

} 


private void Button_Click(object sender, RoutedEventArgs e) 
{ 
for (int i = 0; i < 10; i++) 
{ 
String vName = "Игрок" + i.ToString(); 
PlayersInGame.Add(new PLayer { Name = vName, Tax = new TimeSpan(0) }); 
} 
for (int i = 10; i < 20; i++) 
{ 
String vName = "Игрок" + i.ToString(); 
PlayersInGame2.Add(new PLayer { Name = vName, Tax = new TimeSpan(0) }); 
} 
Game.Items.Refresh(); 
} 

private void Button2_Click(object sender, RoutedEventArgs e) 
{ 
if (Game.SelectedIndex > -1) 
{ 
var temp = PlayersInGame[Game.SelectedIndex]; 
//PlayersInGame.RemoveAt(Game.SelectedIndex); 
temp.Tax = new TimeSpan(0, 0, 5); 
PlayersOnBench.Add(temp); 
Game.Items.Refresh(); 
Bench.Items.Refresh(); 
} 
if (Game2.SelectedIndex > -1) 
{ 
var temp = PlayersInGame2[Game2.SelectedIndex]; 
//PlayersInGame2.RemoveAt(Game2.SelectedIndex); 
temp.Tax = new TimeSpan(0, 0, 5); 
PlayersOnBench.Add(temp); 
Game2.Items.Refresh(); 
Bench.Items.Refresh(); 
} 
} 

private void timer_Tick(object sender, EventArgs e) 
{ 
foreach (var x in PlayersOnBench) 
{ 
x.Tax -= new TimeSpan(0, 0, 1); 
} 

List<int> Temp = new List<int>(); 
for (var i = 0; i < PlayersOnBench.Count; i++) 
{ 
if (PlayersOnBench[i].Tax == TimeSpan.Zero) 
{ 
Temp.Add(i); 

} 
} 
for (int i = Temp.Count - 1; i >= 0; i--) 
{ 
var s = PlayersOnBench[i]; 



PlayersOnBench.RemoveAt(Temp[i]); 
//PlayersInGame.Add(s); 
//Game.Items.Refresh(); 


} 
Bench.Items.Refresh(); 
} 
} 

就當你點擊「Button2_Click」行被添加到ListView「臺」與另外一個定時器的按鈕主要形式。在「timer_Tick」的處理中計時器正在計算添加到「Bench」中的所有行。聯繫ossushestvlyaetsya a綁定。我的問題是知道二進制序列化,如何ListView的「板凳」的內容傳輸到服務器在ListView或列表框中顯示。該項目的二進制序列化已用於發送文本字段。

回答

0

你的問題是那種你想達到什麼樣的不清楚。在一般情況下,如果你使用二進制序列化,將你的對象轉換爲字節數組,你需要反序列化序,讓您的對象返回。下面是一個示例

BinaryFormatter m_formatter; 
    Byte[] m_stateData; 
    List<T> cloned_objList; 

    public binaryserializer(List<T> PlayersOnBench) 
    { 
     if ((!Object.ReferenceEquals(listToClone, null)) && (typeof(T).IsSerializable)) 
     { 
      m_formatter = new BinaryFormatter(); 
      using (MemoryStream stream = new MemoryStream()) 
      { 
       try 
       { 
        m_formatter.Serialize(stream, PlayersOnBench); 
       } 
       catch { } 

       stream.Seek(0, SeekOrigin.Begin); 
       m_stateData = stream.ToArray(); 
      } 
     } 
    } 

    public List<T> BenchStates 
    { 
     get 
     { 
      using (MemoryStream stream = new MemoryStream(m_stateData)) 
      { 
       try 
       { 
        cloned_objList = (List<T>)m_formatter.Deserialize(stream); 
       } 
       catch (Exception) { } 
      } 
      return cloned_objList; 
     } 
    }