切换图片框中的图像

时间:2015-06-14 10:10:32

标签: c# image winforms linq picturebox

在Windows窗体应用程序中,我必须在一个图片框中显示一些(或多个)图像 - 它们需要每10秒(或类似)更改一次。
我首先从数据库中检索图像并将其显示在特定的图片框中 每张图片都有一个唯一的ID,只有一张图片一切正常。

我有SQL数据库(SQL Server 2014)并使用LINQ。

public void displayAdds(ImageAd img, int imgid)
    {

         using (var dbContext = new LinqClassesDataContext())
        {

            var table = from t in dbContext.ImageAds
                        where t.Id == imgid
                        select t;

            img.image = table.Single().image;

            pictureBox1.Image = ByteArrayToImage(img.image.ToArray());
        }
    }

最后,'display'必须在foreach循环中,因为我将有一个int列表(List),所以我只能显示带有选定ID的图像。

我尝试使用线程或刷新,这样的简单循环不起作用:

for(int i=0; i<5; i++)
 {
    displayAdds(img, i);
   }

以下是我尝试过但没有用的其他方法。

public void displayAd(ImageAd img)
    {
        int i = 1;

        using (var dbContext = new LinqClassesDataContext())
        {
            while (true)
            {
                var table = from t in dbContext.ImageAds
                            where t.Id == i
                            select t;

                img.image = table.Single().image;

                pictureBox1.Image = ByteArrayToImage(img.image.ToArray());

                Thread.Sleep(1000);
                i++;

                if (i >= 15)
                    i = 1;
            }

        }
    }


    public void displayList(ImageAd img)
    {
        using (var dbContext = new LinqClassesDataContext())
        {
            for (int i = 0; i < 5; i++)
            {
                var table = from t in dbContext.ImageAds
                            where t.Id == i
                            select t;

                img.image = table.Single().image;

               // pictureBox1.Image = ByteArrayToImage(img.image.ToArray());

                PictureBox pb = new PictureBox();
                //254,15
                pb.Location = new Point(254, 15);
                pb.Size = new Size(310, 367);
               // pb.BorderStyle = BorderStyle.Fixed3D;
                pb.Image = ByteArrayToImage(img.image.ToArray());
                pb.Cursor = System.Windows.Forms.Cursors.Hand;
                this.Controls.Add(pb);
                pb.BringToFront();

                Thread.Sleep(1000);

            }
        }
    }

2 个答案:

答案 0 :(得分:1)

我找到了一种方法,到目前为止工作正常。 原来它已经在StackOverflow上了,不幸的是我之前没有找到它:Changing image in picture box rapidly

我用过这样的话:

<div class="disclaimer">
  <p>Der ritter überladen ie des den der kâmen und. Daz ane waz ie der waz Tristan, lant ende, wol daz, schaden nieman lant benaeme sîne ze der wîp, schaden liute ie. Und diz von, trôstes wârheit haete nieman unde. Iuch meistiu alsô lande ze belanget, vol niht verluren, meistiu er schedelîchen swer ritter ze ie niht ende swer.</p>
  <p>Nû von wizzen nû, trôstes leide vernomen er an vil unde iuch der ie und nû. Einen der maeres was sîn ze ist welle dâ dô trôstes maeres sô er der ze, der diz noch. Der, welle vâlant tohter ane ie diz dar maere anders daz manz was und diz giht daz? Dâ tûsenden sîne er zuoversiht dar unde eine ze leide erkande. Was des sîne ritter ir waere der iuch von daz, diz swer lantmaere liute ane vride swuor. Der, kâmen niht, ir iuch belanget wunneclîche ritter maere zuoversiht. Lant daz bî selbe sîn niht daz.</p>
  <img class="logo-left" src="http://s1.postimg.org/j4mav1ikb/logo_left.jpg">
  <img class="logo-right" src="http://s1.postimg.org/bda6a83sr/logo_right.jpg">
</div>
<ul class="legallinks">
  <li><a href="#modal_legal1" class="legal-link" data-toggle="modal">Legal1</a></li>
  <li><a href="#modal_legal2" class="legal-link" data-toggle="modal">Legal2</a></li>
</ul>

答案 1 :(得分:0)

(