首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ping不适用于BackgroundWorker。

Ping不适用于BackgroundWorker。
EN

Stack Overflow用户
提问于 2016-01-30 06:34:41
回答 1查看 334关注 0票数 4
代码语言:javascript
复制
private void backworker_PING_DoWork(object sender, DoWorkEventArgs e)
{
    bool pingable = false;
    Ping pinger = new Ping();
    try
    {
        PingReply reply = pinger.Send(MainWindow.GlobalVar.global_ip);
        if (reply.Status == IPStatus.Success)
        {
             pingable = true;
        }
        else
        {
             pingable = false;
        }
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    //System.Windows.Forms.MessageBox.Show("...");
    if (pingable == true)
    {
        this.pingtxt.Content = MainWindow.GlobalVar.global_ip + " is Ping able.";
    }
    else
    {
        this.pingtxt.Content = @"[!]" + MainWindow.GlobalVar.global_ip + " is unPingable.";
    }
}

每3秒运行一次。 MainWindow.GlobalVar.global_ip是一个字符串,总是"127.0.0.1“ 和 pingtxt没有设置上下文。有什么问题吗?

代码语言:javascript
复制
<Label x:Name="pingtxt" Content="***?" HorizontalAlignment="Left" Margin="650,139,0,0" VerticalAlignment="Top" Height="26" RenderTransformOrigin="0.5,0.5">
            <Label.Foreground>
                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                    <GradientStop Color="White" Offset="0"/>
                    <GradientStop Color="#FF8F8F8F" Offset="1"/>
                </LinearGradientBrush>
            </Label.Foreground>
            <Label.Effect>
                <DropShadowEffect ShadowDepth="0" BlurRadius="2" Opacity="0.5"/>
            </Label.Effect>
        </Label>

平txt细节

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 08:30:20

只能从UI线程修改UI。

使用Dispatcher.Invoke

代码语言:javascript
复制
private void backworker_PING_DoWork(object sender, DoWorkEventArgs e)
{
    bool pingable = false;
    Ping pinger = new Ping();
    try
    {
        PingReply reply = pinger.Send(MainWindow.GlobalVar.global_ip);
        if (reply.Status == IPStatus.Success)
        {
            pingable = true;
        }
        else
        {
            pingable = false;
        }
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    //System.Windows.Forms.MessageBox.Show("...");
    if (pingable == true)
    {
        System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => { pingtxt.Content = MainWindow.GlobalVar.global_ip + " is Ping able."; }));
    }
    else
    {
        System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() => { pingtxt.Content = MainWindow.GlobalVar.global_ip + " is unPingable."; }));
    }
}

我测试过了,这对我有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35098852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档