私はwinformアプリケーションでnancyfxを使用する際に問題があります(私はwinformアプリケーションを作成し、アプリケーション内でnancyfxを使用します)。これにより、追加のサーバーやサービスを使わずにwinformを変更できるAPI URLを使用できますWinフォームアプリケーションでのナンシー)ここでNancyfxで始まるワーカースレッドからメインスレッドを実行するには? C#
が私のForm1.cs
public partial class Form1 : Form
{
public Form1(bool test)
{
InitializeComponent();
textBox1.Text += "Apps Method "+ Environment.NewLine;
}
public bool startTestAPI()
{
textBox1.Text += "Api Worked" + Environment.NewLine);
}
private void button2_Click(object sender, EventArgs e)
{
HostingAPI s = new HostingAPI();
s.Start();
textBox1.Text += "Api Running" + Environment.NewLine);
}
}
public class ModuleCDM : NancyModule
{
public ModuleCDM()
{
try
{
Thread th2 = Thread.CurrentThread;
Get["/Start"] = parameters =>
{
Form1 form = new Form1(false);
Thread testthread = Form1.curthread;
bool res = form.startTestAPI();
if (res == true)
{
var feeds = new string[] { "Success" };
return Response.AsJson(feeds);
}
else
{
var feeds = new string[] { "Failed" };
return Response.AsJson(feeds);
}
};
}
}
}
であり、これは
public class HostingAPI
{
private NancyHost hostNancy;
private string hostUrl;
public void Start()
{
hostUrl = ConfigModule.ModuleAddress;
if (hostUrl == null) hostUrl = "http://localhost:5005";
hostNancy = new NancyHost(new Uri(hostUrl));
hostNancy.Start();
}
public void Stop()
{
hostNancy.Stop();
}
}
私HostingAPI.csであり、それが成功し、エラーなしで実行されますが、私は、APIを呼び出すとき(localho st:5005/Start)winform appsのテキストボックスには、私が望むテキスト( "Api Worked")は追加されません。 APIコールがあるときにNancyfxが別のスレッドを作成し、invoke/begininvokeを使用できることに気付きました!なぜなら!invokerequiredは常に値がfalseであるためです。では、どうすればメインスレッドにアクセスするか、APIを呼び出すときにUIを更新する別のソリューションにアクセスできます。
ありがとうございました
ベアーイェーイ、それが動作します。私はシングルトンの形について考えることさえしません。どうもありがとう。 –