2016-08-07 75 views
-1

我正在搜索一個xml文件,但該文件有500個項目,我想使用線程併爲點擊該按鈕時每50個連續索引分配一個線程。我怎樣才能做到這一點?這是搜索代碼。XML文件中的多線程搜索

private void button1_Click(object sender, EventArgs e) 
     { 
      XmlReader xmlFile; 
      xmlFile = XmlReader.Create("Product.xml", new XmlReaderSettings()); 
      DataSet ds = new DataSet(); 
      DataView dv; 
      ds.ReadXml(xmlFile); 

      dv = new DataView(ds.Tables[0]); 
      dv.Sort = "Product_Name"; 
      int index = dv.Find("Product " + textBox1.Text.ToString()); 

      if (index == -1) 
      { 
       MessageBox.Show("Item Not Found"); 
      } 
      else 
      { 
       MessageBox.Show(dv[index]["Product_Name"].ToString() + " " + dv[index]["Product_Price"].ToString()); 
      } 
     } 

這是在XML文件

<Product> 
<Product_id>1</Product_id> 
<Product_name>Product 1</Product_name> 
<Product_price>1000</Product_price> 
</Product> 
+1

它是一個實用或教育任務是什麼?如果你擁有那麼微小的結構,那真的不值得。 – zerkms

+0

這是一個教育任務,我知道這是不值得的,但我必須完成它,我已經搜索,並沒有找到答案@zerkms – Nom95715

+0

有什麼約束?時間?記憶?使用特定的類/方法?多線程是強制性的? – Mars

回答

0

我認爲,我們需要解析XML文件,以便有對象的集合進入一個項目,然後使用鏈路的功率用於搜索。

class Program 
{ 
    public delegate bool ProcuctComparator(Product elem,string Uservalue); 
    static void Main(string[] args) 
    { 
     UsingXml op = new UsingXml(); 
     string Uservalue = "Product 1"; 
     ProcuctComparator delg = new ProcuctComparator(byProductName); 

     op.parseXml(@"c:\temp\data.xml"); 

     var elem = op.myProducts.Products.AsParallel().Where(f => 
      { 
       return delg(f, Uservalue); 
      }).Count(); 
     Console.WriteLine(elem); 
     Console.ReadKey(); 
    } 
    private static bool byProductName(Product elem, string Uservalue) 
    { 
     return elem.Product_name.Equals(Uservalue); 
    }    

} 
public class UsingXml 
{ 
    public ProductList myProducts { get; set; } 
    public void parseXml(string filePath) 
    { 
     try 
     { 
      FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read); 
      XmlSerializer xmlSer = new XmlSerializer(typeof(ProductList)); 
      myProducts = (ProductList)xmlSer.Deserialize(fs); 
     } 
     catch(Exception ex) 
     { 

       Console.WriteLine(ex.Message); 

     } 
    } 
} 
[XmlRoot("Table")] 
public class ProductList 
{ 
    public ProductList() { } 
    [XmlElement(ElementName = "Product")] 
    public List<Product> Products { get; set; } 
} 
public class Product 
{ 
    public Product() { } 
    [XmlElement(ElementName = "Product_id")] 
    public int Product_id { get; set; } 
    [XmlElement(ElementName = "Product_name")] 
    public string Product_name { get; set; } 
    [XmlElement(ElementName = "Product_price")] 
    public int Product_price { get; set; }  
} 
0

或者您可以使用鏈接到XML從XML文檔搜索的項目,因爲鏈接到XML使用功能進場施工

static void Main(string[] args) 
    { 
     string UserInput = "someCreteria"; 
     using (var xmlStream = new FileStream(@"c:\temp\peoples.xml", FileMode.Open)) 
     { 
      using (var xmlReader = new XmlTextReader(xmlStream)) 
      { 
       XDocument doc = XDocument.Load(xmlReader); 
       var result = doc.Descendants().AsParallel().Where(x => x.Value.Equals(UserInput)).FirstOrDefault(); 
       if (result == null) 
        Console.WriteLine("No item found"); 
       else 
        Console.WriteLine(result.Value.ToString()); 
      } 
     } 
     Console.ReadKey(); 
    }