C# 当满足if语句时,尝试在三个映像之间循环

C# 当满足if语句时,尝试在三个映像之间循环,c#,C#,目前,我的代码中有四个if语句用于更改某些显示。在InQueueInRing>10的if语句中,我希望它在红色、黄色和绿色图像之间每隔0.5秒循环一次,直到条件不再为真。我不知道从哪里开始骑自行车的图像。我是否只是多次列出图像源,并在它们之间加一个线程。Sleep(1000) 我试着用 但我无法将system.threading.timer类型转换为system.windows.media.imagesource。更新代码如下 下面是我的if语句 if (e.CmsData.Skill.

目前,我的代码中有四个
if
语句用于更改某些显示。在
InQueueInRing>10
if
语句中,我希望它在红色、黄色和绿色图像之间每隔0.5秒循环一次,直到条件不再为真。我不知道从哪里开始骑自行车的图像。我是否只是多次列出图像源,并在它们之间加一个
线程。Sleep(1000)

我试着用 但我无法将system.threading.timer类型转换为system.windows.media.imagesource。更新代码如下

下面是我的
if
语句

    if (e.CmsData.Skill.AgentsAvailable > 0)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
        {
            callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
            callsWaitingData.Foreground = new SolidColorBrush(Colors.Green);
            callsWaitingText.Text = "Available";
            callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_green.png", UriKind.Absolute));
        }));
    }
    else if (e.CmsData.Skill.InQueueInRing > 10)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
        {
            callsWaitingData.Text = e.CmsData.Skill.InQueueInRing.ToString();
            callsWaitingData.Foreground = new SolidColorBrush(Colors.Red);
            callsWaitingText.Text = "Waiting";
            timer = new system.threading.timer(OnTImerEllapsed, new object(), 0, 2000);
        }));
    }
    else if (e.CmsData.Skill.InQueueInRing > 0)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
        {
            callsWaitingData.Text = e.CmsData.Skill.InQueueInRing.ToString();
            callsWaitingData.Foreground = new SolidColorBrush(Colors.Red);
            callsWaitingText.Text = "Waiting";
            callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_red.png", UriKind.Absolute));
        }));
    }
    else if (e.CmsData.Skill.AgentsAvailable == 0)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
        {
            callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
            callsWaitingData.Foreground = new SolidColorBrush(Colors.Yellow);
            callsWaitingText.Text = "Available";
            callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_yellow.png", UriKind.Absolute));
        }));
    }



private void OnTimerEllapsed(object state)
        {
            if (!this.Dispatcher.CheckAccess())
            {
                this.Dispatcher.Invoke(new Action(LoadImages));
            }
        }   

        private void LoadImages()
        {
            string stringUri = switcher ? @"pack://application:,,,/ScoreBoardClientTest;component/images/circle_red.png" :
                                          @"pack://application:,,,/ScoreBoardClientTest;component/images/circle_yellow.png";
                                         // @"pack://application:,,,/ScoreBoardClientTest;component/images/circle_green.png";
            this.callimgae.Source = new BitmapImage(new Uri(stringUri));

            switcher = !switcher;
        }  

因此,我看不到您代码的其余部分,但是如果您要经常使用这些图像,请确保在执行此类操作(为了性能)之前将它们预加载或缓存到某个位置

有很多线程/进程类可以使用,但我喜欢使用的基本类就是线程类。下面是如何设置线程

Thread myThread = new Thread(threadDelegate);
threadDelegate属于ThreadStart类,它是您希望线程执行的工作。下面是设置threadDelegate的一种方法

ThreadStart threadDelegate = new ThreadStart(() => {
    while (isCycling == true)
    {
        // Your code here
        Thread.Sleep(1000);
    }
});
isCycling是指循环在某些情况下停止,例如在一些奇数循环之后或过早退出。最后,您可以让线程使用start方法启动您提供的委托/工作

myThread.Start();

如果需要父线程(即主线程)要等待线程停止或不继续运行,直到循环完成,您可以在myThread上使用Join方法。

更新了代码,尝试了我找到的另一篇文章中的新尝试。另外要注意的是,在尝试中,我尝试使用了所有三个图像,但由于仅说明赋值、调用、增量、减量、,新的对象表达式可以用作语句。虽然它不是一个声明,格式正确。好吧,我想我自己通过一些尝试和错误修正了这个问题。正确的答案是这个问题,我会在堆栈溢出允许的情况下标记自己回答的问题。。。我以前从未预加载过图像,而性能是我开始有问题的地方。你能在任何情况下对此提供帮助吗?你使用的是什么平台?如果是WPF、ASP或通用C#,我可以为您指出正确的方向。如果是Unity或者虚幻或者任何游戏引擎,我都不会帮上什么忙。我对它们的了解还不够,无法给您提供关于性能的明确答案。我正在使用WPF作为一个平台。VisualStudio15,尽管我确信这不会有什么不同。请将图像加载到参考资料中。在VS中,您可以将复制的图像粘贴到“资源”选项卡中,以方便发送。是的,ferday提到了一种提高性能的方法。创建一个资源文件将创建一个表,该表将保存您的图像,您可以使用您给它的唯一键检索图像。