小编Clo*_*ock的帖子

Web API自托管客户端配置

我设法在控制台应用程序中使用OWIN运行我自己托管的WEP API,方法是使用如下代码:

//string baseAddress = "http://192.168.1.6:8111/";
string baseAddress = "http://+:8111/";

// Start OWIN host 
using (Microsoft.Owin.Hosting.WebApp.Start<Startup>(url: baseAddress))
{
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

通过在服务主机上使用和注册类似" http:// +:9000 / "的地址,我们的想法是使用主机的通用IP地址,当主机的IP可能发生变化时,该地址不会影响客户端.

客户端位于运行服务的其他计算机上.类似于局域网中的移动电话或来自局域网的其他笔记本电脑,以及将来如果可能的话,也可以在局域网之外.

在我的自托管服务的客户端,这是一个html页面,我有一个JavaScript代码,如:

//var uri = 'http://192.168.1.6:8111/api/tests';
var uri = 'http://+:8111/api/tests';

function Read()
{
    $.getJSON(uri + '/' + id)
}
Run Code Online (Sandbox Code Playgroud)

通过在客户端使用主机的静态注释IP地址,我可以访问自托管的WEB API,但是当我尝试使用通用的" http:// +:9000/api/tests "时,它无法连接到服务.

有没有办法通过使用这样的通用配置从客户端连接到服务?或者我应该如何配置服务主机和客户端,以便主机上的IP更改不会停止客户端计算机上的服务?

我需要考虑到我的自托管计算机的IP地址可能会更改,客户端将丢失连接,因为他们将使用服务主机的旧的过时IP地址.

.net c# asp.net-web-api self-host-webapi

6
推荐指数
1
解决办法
782
查看次数

我的SQLite数据库在哪里创建?

我按照这里提供的教程:EF7教程

它似乎是一个众所周知的关于SQLite,UWP和EF7的教程都遵循它的预期,但我无法找到代码优先方法创建的数据库的物理路径.

这件事很奇怪我想用"DB Browser for SQL Lite"打开sqlite数据库,但我找不到它...

你们中的一些人是否遵循这个通用教程并找到了数据库,或者你知道EF7代码首先创建数据库的位置吗?

c# sql sqlite entity-framework uwp

5
推荐指数
1
解决办法
1967
查看次数

C#事件为空

我正在研究一个项目,我需要提升并处理一个自定义事件......我只是简化了一些代码并获得了类似的东西:

class Car
{
    public int Speed { get; set; }

    public delegate void SpeedTooHigh(string message);

    public event SpeedTooHigh OnSpeedToHigh;

    public Car(int speed)
    {
        this.Speed = speed;

        if (speed >= 100)
        {
            if (this.OnSpeedToHigh != null)
            {
                this.OnSpeedToHigh("Car has a too high speed !");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和我使用这个类的主要类:

class Program
{
    static void Main(string[] args)
    {
        Car car = new Car(120, "Red", "Renault");

        car.OnSpeedToHigh += OnCarSpeedToHigh;

        Console.WriteLine("Test events");

        Console.ReadKey();
    }

    static void OnCarSpeedToHigh(string message)
    {
        Console.WriteLine(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个例子时,似乎Car类中的"OnSpeedToHigh"始终为null.而且我不明白为什么因为我在主类中创建这个类的实例并将速度设置为大于100,以便"this.OnSpeedToHigh("Car具有太高的速度!")"被调用. …

c# null events delegates

3
推荐指数
1
解决办法
8096
查看次数

访问未分配的内存C++

我有这段代码:

try
{
    int* myTestArray = new int[2];

    myTestArray[4] = 54;

    cout << "Should throw ex "  << myTestArray[4] + 1 << endl;
}
catch (exception& exception)
{ 
    cout << "Exception content: " << exception.what() << endl;
}
Run Code Online (Sandbox Code Playgroud)

对我来说真正的好处是,为什么没有抛出异常,因为它被访问了一个未分配的索引......以及为什么要打印55?是C++自动增加了数组的大小吗?

c++ memory arrays pointers

3
推荐指数
2
解决办法
1941
查看次数

如何自定义UWP页面的应用程序标题栏

我试图为UWP页面设置一个页面的应用程序标题栏,并且还禁用恢复按钮,但我找不到与此相关的任何内容.

我所能做的就是改变应用程序标题栏的颜色,其代码如下所示

    public MainPage()
    {
        this.InitializeComponent();
        ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.FullScreen;
        ApplicationView.GetForCurrentView().Title = "TEST";
        ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
        titleBar.ForegroundColor = Color.FromArgb(1, 1, 1, 1);

    }
Run Code Online (Sandbox Code Playgroud)

但这就是我能做的所有......应用程序标题栏的标题也很奇怪,因为我将它设置为"TEST"但在UI上显示"ProjectName-TEST".

所以,你知道我怎么能自定义(设置应用程序栏标题,不仅当用户将光标移动到页面顶部并禁用恢复按钮时,将其设置为可见(就像我可以在Windows窗体中一样) ))UWP项目页面的应用程序标题栏?

c# uwp uwp-xaml

3
推荐指数
1
解决办法
7142
查看次数

尝试解析失败后保留默认值

我有这个代码:

string myStr = "sdfs";
double myDouble = 3;
double.TryParse(myStr, out myDouble);
Run Code Online (Sandbox Code Playgroud)

因此解析将失败,并且我分配给“myDouble”的值也将更改为 0。

即使解析失败,有没有一种很好的方法来保持这 3 个默认值?没有像这样的 if 子句

if(!double.TryParse(myStr, out myDouble))
{
    myDouble = 3;
}
Run Code Online (Sandbox Code Playgroud)

.net c# default

2
推荐指数
1
解决办法
977
查看次数

使用 MVVM 在组合框中设置默认值

当应用程序首次使用 MVVM 模式加载时,我试图在组合框中设置一个默认值,并且看起来它始终未设置,当页面加载时,组合框始终为空。

这是我的 xaml:

    <ComboBox Grid.Row="0" Margin="10,0,0,0" Grid.Column="1" 
              SelectedItem="{Binding Path=JuiceOperations.SelectedItemOption, Mode=TwoWay}"
              SelectedIndex="{Binding Path=JuiceOperations.SelectedComboBoxOptionIndex, Mode=TwoWay}"
              SelectedValue="{Binding Path=JuiceOperations.SelectedComboBoxOptionIndex, Mode=TwoWay}"
              ItemsSource="{Binding Path=JuiceOperations.JuiceOptions}" />
Run Code Online (Sandbox Code Playgroud)

这是视图模型代码及其默认构造函数:

    public JuiceViewModel()
    {
        juiceOperations.SelectedComboBoxOptionIndex = 0;
        juiceOperations.SelectedItemOption = "Cola";
    }
Run Code Online (Sandbox Code Playgroud)

我试图设置组合框的默认值。

这就是属性的样子:

private List<string> juiceOptions = new List<string> { "Cola", "Sprite", "Fanta", "Pepsi" };

    private string selectedItemOption = string.Empty;

    private int selectedComboBoxOptionIndex = 0;

    public int SelectedComboBoxOptionIndex
    {
        get
        {
            return this.selectedComboBoxOptionIndex;
        }

        set
        {
            this.selectedComboBoxOptionIndex = value;
            this.OnPropertyChanged("SelectedComboBoxOptionIndex");
        }
    }

    public List<string> JuiceOptions
    {
        get
        {
            return …
Run Code Online (Sandbox Code Playgroud)

c# wpf combobox mvvm

2
推荐指数
1
解决办法
4931
查看次数

从异步方法更新进度栏

我试图更好地了解如何从异步操作中更新Windows窗体进度栏,但是从中我得到了一些意外的行为。

基本上我有一个按钮,单击该按钮后应更新进度条,然后在进度条获得100%更新后将其设置回0。

这是我的代码:

    private async void button1_Click(object sender, EventArgs e)
    {
        await CallMethodAsync().ContinueWith((prevTask) => 
        {
            prevTask.Wait();
            progressBar1.Invoke(new Action(() => { progressBar1.Value = 0; }));
        });
    }

    private static async Task ExecuteMethodAsync(IProgress<double> progress = null)
    {
        double percentComplete = 0;
        bool done = false;

        while (!done)
        {
            if (progress != null)
            {
                progress.Report(percentComplete);
            }

            percentComplete += 10;

            if(percentComplete == 100)
            {
                done = true;
            }
        }
    }

    private async Task CallMethodAsync()
    {
        var progress = new Progress<double>();
        progress.ProgressChanged += (sender, args) …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await

1
推荐指数
1
解决办法
4039
查看次数

实例集合的意外行为

例如,我有以下类:

class Person
{
    public List<int> Grades{ get; set; }

    public Person(List<int> grades)
    {
        this.Grades = grades;
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我在主方法中使用这个类,比如:

    static   void Main(string[] args)
    {
        List<int> grades = new List<int> { 1, 2, 3, 4, 5 };
        Person person = new Person(grades);

        for (int i = 0; i < 5; i++)
        {
            if (i % 2 == 0)
            {
                grades[i] = 0;
            }
            else
            {
                grades[i] = -1;
            }
        }

        foreach(var grade in person.Grades)
        {
            Console.Write(grade + " ");
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# collections instance

0
推荐指数
1
解决办法
68
查看次数

使用Interlocked的意外结果

我有这个代码

int j = -1;
Parallel.For(0, 100, i =>
{
    Console.Write("i= " +i);
    Interlocked.Increment(ref j);
    Console.Write(" j= " + j);
    Console.WriteLine();
});
Run Code Online (Sandbox Code Playgroud)

在运行之后,我希望以i某种方式随机显示值,而不是按升序排列,但是对于j变量的值,我希望它们始终按升序排列.

所以现在我在某个时候有这个输出:

在此输入图像描述

所以有一个j= 78值之间9394,这是正确的?难道一些请你解释我为什么在这里,而不是之间有这样的价值7779,这是因为Console.Write方法不是线程安全的?

j给出的变量值(正如我所期望的那样)是否按升序排列,输出j = 78只是Console.Write方法的一个小故障,因为它不是线程安全的?

.net c# multithreading

0
推荐指数
1
解决办法
59
查看次数