我在我的winform應用程序中使用nancyfx時出現了問題(我製作了一個winform應用程序並在應用程序中使用了nancyfx)因此,我可以使用一些API url來更改winform而無需附加服務器或服務(因爲我附加南希在WinForm應用程序)如何在由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);
}
};
}
}
}
,這是我HostingAPI.cs
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();
}
}
而且它沒有錯誤成功運行,但是當我調用API (localho st:5005/Start)winform應用中的文本框不會添加我想要的文本(「Api Worked」)。我注意到這是因爲Nancyfx在有API調用時創建另一個線程,並且我可以使用invoke/begininvoke,因爲!invokerequired總是帶有值false。那麼我怎樣才能訪問主線程或者可能是另一個解決方案來在我調用API時更新UI。
謝謝
耶它的工作原理。我甚至不考慮單身形式。非常感謝。 –