有了这段代码,我可以用wpf的c#从mysql数据库中获取一个图像。但我在数据库中有一个表,包含所有国家的名称和国旗等。当我查询选择多个或所有国家时,在这行“bi.begininit()”出现错误“不能多次设置初始化状态”。提前谢谢。
string co = null;
string na = null;
string le = null;
string gn = null;
string A = "pak";
BitmapImage bi = new BitmapImage();
try
{
MySqlCommand cmd = new MySqlCommand("Select Code,Name,LifeExpectancy,GNP,flg from country where Name REGEXP '" + A + "'", connection);
MySqlDataReader dataReader = cmd.ExecuteReader();
while (dataReader.Read())
{
co = dataReader["Code"].ToString();
na = dataReader["Name"].ToString();
le = dataReader["LifeExpectancy"].ToString();
gn = dataReader["GNP"].ToString();
Byte[] bindata = (Byte[])dataReader["flg"];
MemoryStream strm = new MemoryStream();
strm.Write(bindata, 0, bindata.Length);
strm.Position = 0;
System.Drawing.Image img = System.Drawing.Image.FromStream(strm);
bi.BeginInit();
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Seek(0, SeekOrigin.Begin);
bi.StreamSource = ms;
bi.EndInit();
dt.Rows.Add(co, na, le, gn, bi);
dataGridCustomers.ItemsSource = dt.DefaultView;
}
}
catch (MySqlException ex)
{
MessageBox.Show(ex.ToString());
}
1条答案
按热度按时间vbopmzt11#
原因是您正在循环外创建bitmapimage。因此,一旦进入循环,它就会不断尝试在同一个映像上设置初始化状态。因为你的错误说明你不能这样做。您需要做的是在每次迭代中创建一个新的位图图像。这可以通过移动线路来实现
循环的内部。除非有特定的原因,你要初始化它在你所在的地方。
编辑:在上面的代码中
System.Drawing.Image
完全是多余的。您应该直接从字节数组创建bitmapimage,如下所示: